Pagini recente » Clasament 376 | Borderou de evaluare (job #2023120) | Borderou de evaluare (job #2001099) | Borderou de evaluare (job #2010548) | Cod sursa (job #2412107)
#include <cstdio>
#include <algorithm>
#include <fstream>
using namespace std;
ofstream g ("triang.out");
FILE *f;
short int N, k, inc, l;
float nr[1501][1501], c[1501][3], q;
long long nrtri;
struct D
{
int x, y;
float d;
};
D v[1125000];
bool comp (D a, D b)
{
return a.d<=b.d;
}
int main ()
{
f=fopen ("triang.in", "r");
fscanf (f, "%hd", &N);
for (short int i=1; i<=N; i++)
fscanf (f, "%f%f", &c[i][1], &c[i][2]);
for (short int i=1; i<N; i++)
for (short int j=i+1; j<=N; j++)
{
q=(c[i][1]-c[j][1])*(c[i][1]-c[j][1])+(c[i][2]-c[j][2])*(c[i][2]-c[j][2]);
nr[i][j]=q;
nr[j][i]=q;
v[++k].d=q;
v[k].x=i;
v[k].y=j;
}
sort (v+1, v+k+1, comp);
for (short int i=1; i<=k-2; i++)
{
inc=i;
i++;
while (v[i].d==v[inc].d)
i++;
i--;
for (short int j=inc; j<=i-1; j++)
for (short int j2=j+1; j2<=i; j2++)
{
if (v[j].x==v[j2].x)
nrtri+=(long long) (nr[v[j].y][v[j2].y]==v[inc].d);
else if (v[j].x==v[j2].y)
nrtri+=(long long) (nr[v[j].y][v[j2].x]==v[inc].d);
else if (v[j].y==v[j2].x)
nrtri+=(long long) (nr[v[j].x][v[j2].y]==v[inc].d);
else if (v[j].y==v[j2].y)
nrtri+=(long long) (nr[v[j].x][v[j2].x]==v[inc].d);
}
}
g<<nrtri/3<<'\n';
fclose (f);
g.close ();
return 0;
}