about summary refs log tree commit diff
path: root/12/TP-HN-2008/R2/dg.c
diff options
context:
space:
mode:
authorNguyễn Gia Phong <mcsinyx@disroot.org>2020-06-06 21:33:13 +0700
committerNguyễn Gia Phong <mcsinyx@disroot.org>2020-06-06 21:33:13 +0700
commit2f674dc80f0382f1c3178f435714960734dc9d3c (patch)
tree2abba7e4ec72bd16f58f7375126144d3fd9f4bca /12/TP-HN-2008/R2/dg.c
parentb2d80610db6beda38573890ed169815e495bc663 (diff)
downloadcp-2f674dc80f0382f1c3178f435714960734dc9d3c.tar.gz
Reorganize stuff from secondary school
Diffstat (limited to '12/TP-HN-2008/R2/dg.c')
-rw-r--r--12/TP-HN-2008/R2/dg.c102
1 files changed, 0 insertions, 102 deletions
diff --git a/12/TP-HN-2008/R2/dg.c b/12/TP-HN-2008/R2/dg.c
deleted file mode 100644
index e2422df..0000000
--- a/12/TP-HN-2008/R2/dg.c
+++ /dev/null
@@ -1,102 +0,0 @@
-#include <math.h>
-#include <stdio.h>
-
-#define ABS(x) (((x) < 0) ? -(x) : (x))
-#define SQR(x) ((x) * (x))
-#define DET(a, b, c, d) ((a) * (d) - (b) * (c))
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-
-typedef struct {
-	long x, y;
-} poin_t;
-
-typedef struct {
-	float x, y;
-} fpoin_t;
-
-long area2(poin_t A, poin_t B, poin_t C)
-{
-	return ABS(DET(C.x - A.x, A.x - B.x, C.y - A.y, A.y - B.y));
-}
-
-int main()
-{
-	FILE *f = fopen("DG.INP", "r");
-	char n, i, c = 0, b;
-	poin_t M, N, P, Q, polygon[101];
-	fpoin_t tmp, intersections[2];
-	long Mout = 0, Nout, d;
-	double res;
-
-	fscanf(f, "%hhd", &n);
-	for (i = 0; i < n; i++)
-		fscanf(f, "%ld %ld", &polygon[i].x, &polygon[i].y);
-	fscanf(f, "%ld %ld %ld %ld", &M.x, &M.y, &N.x, &N.y);
-	fclose(f);
-	f = fopen("DG.OUT", "w");
-	if (M.x == N.x && M.y == N.y) {
-		fputs("0\n", f);
-		fclose(f);
-		return 0;
-	}
-
-	for (i = 1; i < n - 1; i++)
-		Mout += area2(*polygon, polygon[i], polygon[i + 1]);
-	for (Nout = Mout, polygon[n] = *polygon, i = 0; i < n; i++) {
-		Mout -= area2(M, polygon[i], polygon[i + 1]);
-		Nout -= area2(N, polygon[i], polygon[i + 1]);
-	}
-	if (!Mout && !Nout) {
-		fprintf(f, "%ld\n",
-		        (long) (sqrt(SQR(M.x - N.x) + SQR(M.y - N.y)) * 100));
-		fclose(f);
-		return 0;
-	}
-
-	for (i = 0; i < n; i++) {
-		P = polygon[i];
-		Q = polygon[i + 1];
-		d = DET(M.x - N.x, M.y - N.y, P.x - Q.x, P.y - Q.y);
-		if (!d)
-			continue;
-
-		tmp.x = DET(DET(M.x, M.y, N.x, N.y), M.x - N.x,
-		            DET(P.x, P.y, Q.x, Q.y), P.x - Q.x) / (double) d;
-		tmp.y = DET(DET(M.x, M.y, N.x, N.y), M.y - N.y,
-		            DET(P.x, P.y, Q.x, Q.y), P.y - Q.y) / (double) d;
-
-		if (tmp.x < MAX(MIN(M.x, N.x), MIN(P.x, Q.x))
-		    || tmp.x > MIN(MAX(M.x, N.x), MAX(P.x, Q.x))
-		    || tmp.y < MAX(MIN(M.y, N.y), MIN(P.y, Q.y))
-		    || tmp.y > MIN(MAX(M.y, N.y), MAX(P.y, Q.y)))
-			continue;
-
-		for (b = d = 0; d < c; d++)
-			if (intersections[d].x == tmp.x
-			    && intersections[d].y == tmp.y)
-				b = 1;
-		if (b)
-			continue;
-
-		intersections[c].x = tmp.x;
-		intersections[c].y = tmp.y;
-		c++;
-	}
-
-	if (!Mout && c)
-		res = SQR(M.x - intersections[0].x)
-		      + SQR(M.y - intersections[0].y);
-	else if (!Nout && c)
-		res = SQR(N.x - intersections[0].x)
-		      + SQR(N.y - intersections[0].y);
-	else if (c == 2)
-		res = SQR(intersections[0].x - intersections[1].x)
-		      + SQR(intersections[0].y - intersections[1].y);
-	else
-		res = 0;
-	fprintf(f, "%ld\n", (long) (sqrt(res) * 100));
-	fclose(f);
-
-	return 0;
-}