Cod sursa(job #1014659)

Utilizator enedumitruene dumitru enedumitru Data 22 octombrie 2013 23:24:29
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("patrate3.in"); ofstream g("patrate3.out");
const double EPS=0.000001;
int n,nr,i,j;
struct Punct{double x,y;} A,B,v[1001];
inline double modul(double x)
{  return x<0 ? -x : x;}
inline bool cmp(Punct P,Punct Q)
{   if(modul(P.x-Q.x)<EPS) return P.y<Q.y;
    return P.x<Q.x;
}
inline bool este(Punct A)
{   int mij,st=1,dr=n;
    while(st<=dr)
    {   mij=(st+dr)/2;
        if(modul(v[mij].x-A.x)<EPS && modul(v[mij].y-A.y)<EPS) return true;
        if(cmp(v[mij],A)) st=mij+1; else dr=mij-1;
    }
    return false;
}
int main()
{   f>>n;
    for(i=1;i<=n;i++) f>>v[i].x>>v[i].y;
    sort(v+1,v+n+1,cmp);
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++)
        {   A.x=v[i].x+v[i].y-v[j].y;
            A.y=v[i].y+v[j].x-v[i].x;
            B.x=v[j].x+v[i].y-v[j].y;
            B.y=v[j].y+v[j].x-v[i].x;
            if(este(A) && este(B)) nr++;
        }
    g<<nr/2<<"\n"; g.close(); return 0;
}