Cod sursa(job #961049)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 16:35:53
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#include<algorithm>
#include<cmath>
#define EPS 0.000001
using namespace std;
int n,sol;
struct Punct{double x,y;};
Punct v[1010];
 
inline bool Sortare(Punct A,Punct B)
{
    if(fabs(A.x-B.x)<EPS)
        return A.y<B.y;
    return A.x<B.x;
}
 
inline bool Exista(Punct A)
{
    int st,dr,mij;
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(fabs(v[mij].x-A.x)<EPS && fabs(v[mij].y-A.y)<EPS)
            return true;
        if(Sortare(v[mij],A)==true)
            st=mij+1;
        else
            dr=mij-1;
    }
    return false;
}
 
int main()
{
    int i,j;
    Punct A,B;
    ifstream fin("patrate3.in");
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i].x>>v[i].y;
    fin.close();
 
    sort(v+1,v+n+1,Sortare);
    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(Exista(A) && Exista(B))
                sol++;
        }
    }
    sol/=2;
 
    ofstream fout("patrate3.out");
    fout<<sol<<"\n";
    fout.close();
    return 0;
}