Cod sursa(job #2412107)

Utilizator ZaqueEraqueZaque Eraque ZaqueEraque Data 21 aprilie 2019 17:34:22
Problema Triang Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#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;
}