Cod sursa(job #1809956)

Utilizator alin1999Buzatu Alin alin1999 Data 19 noiembrie 2016 14:21:55
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin("patrate3.in");
ofstream fout("patrate3.out");
struct a
{
    float abs;
    float ord;
}
coord[1001];
bool comparare(a lhs, a rhs){return lhs.abs<rhs.abs;}
bool comparare2(a lhs, a rhs){return lhs.ord<rhs.ord;}
int i,n,st,dr,mij,patrate,j,gasit;
float abs1,ord1,abs2,ord2,dx,dy,mijx,mijy;
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
fin>>coord[i].abs>>coord[i].ord;
sort(coord+1,coord+n+1,comparare2);
sort(coord+1,coord+n+1,comparare);
for(i=1;i<=n;i++)
    {
        coord[i].abs*=100000;
        coord[i].ord*=100000;
    }

for(i=1;i<=n;i++)
    for(j=i+1;j<=n;j++)
    {
        gasit=0;
        mijx=(coord[i].abs+coord[j].abs)/2;
        mijy=(coord[i].ord+coord[j].ord)/2;
        dx=abs(mijx-coord[i].abs);
        dy=abs(mijy-coord[i].ord);
        if(coord[i].ord<coord[j].ord)
        {abs1=mijx+dy;
        ord1=mijy-dx;
        abs2=mijx-dy;
        ord2=mijy+dx;}
        else
        {
            abs1=mijx-dy;
        ord1=mijy-dx;
        abs2=mijx+dy;
        ord2=mijy+dx;
        }
        st=1;dr=n;
        while(st<=dr && gasit==0)
        {
            mij=(st+dr)/2;
            if(abs1==coord[mij].abs&&ord1==coord[mij].ord)
                gasit=1;
                else
                    if(abs1>coord[mij].abs)
                    st=mij+1;
                else
                    dr=mij-1;
        }
        if(gasit!=0)
        {
            st=1;dr=n;
            while(st<=dr && gasit==1)
        {
            mij=(st+dr)/2;
            if(abs2==coord[mij].abs&&ord2==coord[mij].ord)
                gasit=2;
                else
                    if(abs2>coord[mij].abs)
                    st=mij+1;
                else
                    dr=mij-1;
        }
    }
    if(gasit==2)
        patrate++;
    }
    fout<<patrate;
    return 0;
}