Cod sursa(job #2590046)

Utilizator CleliaClelia Maria Dobrescu Clelia Data 27 martie 2020 13:26:41
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 4.2 kb
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin ("patrate3.in");
ofstream fout ("patrate3.out");
struct ura
{
    double x,y;
};
ura v[1001];
bool cmp(ura x,ura y)
{
    if(fabs(x.x-y.x)<=0.0001)
    {
        if(x.y-y.y>0.0001)
            return false;
        else
            return true;
    }
    else
        if(x.x-y.x>0.0001)
            return false;
        else
            return true;
}
int main()
{
    ura c,d;
    double x,y;
    int n,i,r=0,j,l1,st,dr,m,l2;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>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++)
        {
            x=v[j].x-v[i].x;
            y=v[j].y-v[i].y;
            c.x=v[j].x+y;
            c.y=v[j].y-x;
            l1=0;
            st=1;
            dr=n;
            while(st<=dr)
            {
                m=(st+dr)/2;
                if(v[m].x-c.x<-0.0001)
                    st=m+1;
                else
                    if(v[m].x-c.x>0.0001)
                        dr=m-1;
                    else
                        if(v[m].y-c.y<-0.0001)
                            st=m+1;
                        else
                            if(v[m].y-c.y>0.0001)
                                dr=m-1;
                            else
                            {
                                l1=1;
                                st=dr+1;
                            }
            }
            l2=0;
            if(l1==1)
            {
                d.x=v[i].x+y;
                d.y=v[i].y-x;
                st=1;
                dr=n;
                while(st<=dr)
                {
                    m=(st+dr)/2;
                    if(v[m].x-d.x<-0.0001)
                        st=m+1;
                    else
                        if(v[m].x-d.x>0.0001)
                            dr=m-1;
                        else
                            if(v[m].y-d.y<-0.0001)
                                st=m+1;
                            else
                                if(v[m].y-d.y>0.0001)
                                    dr=m-1;
                                else
                                {
                                    l2=1;
                                    st=dr+1;
                                }
                }
            }
            r=r+l1*l2;
            l1=0;
            l2=0;
            c.x=v[j].x-y;
            c.y=v[j].y+x;
            st=1;
            dr=n;
            l1=0;
            while(st<=dr)
            {
                m=(st+dr)/2;
                if(v[m].x-c.x<-0.0001)
                    st=m+1;
                else
                    if(v[m].x-c.x>0.0001)
                        dr=m-1;
                    else
                        if(v[m].y-c.y<-0.0001)
                            st=m+1;
                        else
                            if(v[m].y-c.y>0.0001)
                                dr=m-1;
                            else
                            {
                                l1=1;
                                st=dr+1;
                            }
            }
            d.x=v[i].x-y;
            d.y=v[i].y+x;
            l2=0;
            if(l1==1)
            {
                st=1;
                dr=n;
                while(st<=dr)
                {
                    m=(st+dr)/2;
                    if(v[m].x-d.x<-0.0001)
                        st=m+1;
                    else
                        if(v[m].x-d.x>0.0001)
                            dr=m-1;
                        else
                            if(v[m].y-d.y<-0.0001)
                                st=m+1;
                            else
                                if(v[m].y-d.y>0.0001)
                                    dr=m-1;
                                else
                                {
                                    l2=1;
                                    st=dr+1;
                                }
                }
                r=r+l1*l2;
            }
        }
    }
    fout<<r/4;
    return 0;
}