Pagini recente » Cod sursa (job #2102005) | Cod sursa (job #1406563) | Cod sursa (job #1488456) | Cod sursa (job #2051018) | Cod sursa (job #31112)
Cod sursa(job #31112)
#include <stdio.h>
#include <math.h>
#define MaxN 1001
#define EPS 0.000001
#define INF 100000001
int N, sol;
struct Punct {
double x, y;
} P[MaxN];
int main()
{
int i, j, k;
FILE *fin = fopen("triang.in", "rt");
FILE *fout = fopen("triang.out", "wt");
fscanf(fin, "%d", &N);
for (i = 1; i <= N; i++)
fscanf(fin, "%lf %lf", &P[i].x, &P[i].y);
double l, xsol = 0, ysol = 0, md = 0, mx = 0, ma = 0;
for (i = 1; i <= N; i++)
for (j = i + 1; j <= N; j++)
{
ma = (P[j].y - P[i].y)/(P[j].x - P[i].x);
l = sqrt((P[j].y - P[i].y)*(P[j].y - P[i].y) + (P[j].x - P[i].x)*(P[j].x - P[i].x));
Punct A = P[i], B = P[j];
Punct D;
D.x = (A.x + B.x) / 2, D.y = (A.y + B.y) / 2;
if (ma < EPS)
{
md = INF;
double L = sqrt(3)*0.5*l;
xsol = D.x, ysol = D.y + L;
for (k = j+1; k <= N; k++)
if (P[k].x - xsol < EPS && P[k].y - ysol < EPS) sol++;
continue;
}
else md = -(1.0 / ma);
mx = (ma + sqrt(3))/(1 - ma*sqrt(3));
//if (fabs(ma - mx) < EPS) return 0;
xsol = (A.y - D.y + md*D.x - mx*A.x) / (md - mx);
ysol = (md*mx*(D.x - A.x) + md*A.y - mx*D.y) / (md - mx);
for (k = j+1; k <= N; k++)
if (P[k].x - xsol < EPS && P[k].y - ysol < EPS) sol++;
//fprintf(fout, "%lf %lf\n", xsol, ysol);
mx = (ma - sqrt(3))/(1 + ma*sqrt(3));
//if (fabs(ma - mx) < EPS) return 0;
xsol = (A.y - D.y + md*D.x - mx*A.x) / (md - mx);
ysol = (md*mx*(D.x - A.x) + md*A.y - mx*D.y) / (md - mx);
for (k = j+1; k <= N; k++)
if (P[k].x - xsol < EPS && P[k].y - ysol < EPS) sol++;
//fprintf(fout, "%lf %lf\n", xsol, ysol);
}
fprintf(fout, "%d", sol);
fclose(fin);
fclose(fout);
return 0;
}