Cod sursa(job #1139705)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 11 martie 2014 13:34:09
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("patrate3.in");
ofstream g("patrate3.out");

int n,i,sol,j,st,dr,mid,ok;

double x1,x2,x3,x4,y1,y2,y3,y4,xg,yg;

struct point {
    double x;
    double y;
} v[1005];

char s[20];

bool cmp(const point &a, const point &b) {
    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;
}

int main() {
    f>>n;
    for(j=1;j<=n;j++) {
        f>>s;
        for(i=0;s[i]!=0;i++)
            if(s[i]!='.') {
                v[j].x=v[j].x*10+(s[i]-'0')*1.0;
            }
        f>>s;
        for(i=0;s[i]!=0;i++)
            if(s[i]!='.') {
                v[j].y=v[j].y*10+(s[i]-'0')*1.0;
            }
    }
    sort(v+1,v+n+1,cmp);
    sol=0;
    for(i=1;i<n;i++)
        for(j=i+1;j<=n;j++) {
            x1=v[i].x;y1=v[i].y;
            x3=v[j].x;y3=v[j].y;
            xg=(x1+x3)/2.0;yg=(y1+y3)/2.0;
            x2=xg-(y3-yg);y2=yg+(xg-x1);
            x4=xg+(y3-yg);y4=yg-(xg-x1);
            st=1;dr=n;ok=1;
            while(st<=dr) {
                mid=st+(dr-st)/2;
                if(v[mid].x>x2)
                    dr=mid-1;
                else
                    if(v[mid].x<x2)
                        st=mid+1;
                    else
                        if(v[mid].y>y2)
                            dr=mid-1;
                        else
                            st=mid+1;
            }
            if(v[dr].x!=x2 || v[dr].y!=y2 || y2!=int(y2) || x2!=int(x2))
                ok=0;
            st=1;dr=n;
            while(st<=dr) {
                mid=st+(dr-st)/2;
                if(v[mid].x>x4)
                    dr=mid-1;
                else
                    if(v[mid].x<x4)
                        st=mid+1;
                    else
                        if(v[mid].y>y4)
                            dr=mid-1;
                        else
                            st=mid+1;
            }
            if(v[dr].x!=x4 || v[dr].y!=y4 || y4!=int(y4) || x4!=int(x4))
                ok=0;
            if(ok)
                sol++;
        }
    g<<sol/2<<"\n";
    return 0;
}