Cod sursa(job #1140437)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 11 martie 2014 23:33:02
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct pct{
    int x;
    int y;
}v[1010];
int n,i,j,x1,yy1,x2,yy2,xp,yp,p,u,mid,ok,nr,semn,l,a;
char s[1000];
int cmp(pct a,pct b){
    if(a.x==b.x)
        return a.y<b.y;
    return a.x<b.x;
}
FILE *f,*g;
int main(){
    f=fopen("patrate3.in","r");
    g=fopen("patrate3.out","w");
    fscanf(f,"%d\n",&n);
    for(i=1;i<=n;i++){
        fgets(s,100,f);
        l=strlen(s);
        j=0;
        x1=0;
        semn=1;
        while(j<l){
            if(s[j]=='-')
                semn=-1;
            else if(s[j]>='0'&&s[j]<='9')
                x1=x1*10+s[j]-'0';
            else if(s[j]==' '){
                a=x1*semn;
                semn=1;
                x1=0;
            }
            j++;
        }
        v[i].x=a*2;
        v[i].y=x1*semn*2;
    }
    sort(v+1,v+n+1,cmp);
    for(i=1;i<n;i++){
        for(j=i+1;j<=n;j++){
            xp=(v[i].x+v[j].x)/2;
            yp=(v[i].y+v[j].y)/2;
            x1=xp-(v[j].y-yp);
            yy1=yp+(xp-v[i].x);
            x2=xp+(v[j].y-yp);
            yy2=yp-(xp-v[i].x);
            ok=1;
            p=1;
            u=n;
            while(p<=u){
                mid=(p+u)/2;
                if(v[mid].x>x1)
                    u=mid-1;
                else if(v[mid].x<x1)
                    p=mid+1;
                else if(v[mid].y>yy1)
                    u=mid-1;
                else
                    p=mid+1;
            }
            if(v[u].x!=x1||v[u].y!=yy1)
                ok=0;
            p=1;
            u=n;
            while(p<=u){
                mid=(p+u)/2;
                if(v[mid].x>x2)
                    u=mid-1;
                else if(v[mid].x<x2)
                    p=mid+1;
                else if(v[mid].y>yy2)
                    u=mid-1;
                else
                    p=mid+1;
            }
            if(v[u].x!=x2||v[u].y!=yy2)
                ok=0;
            if(ok==1)
                nr++;
        }
    }
    fprintf(g,"%d",nr/2);




    fclose(f);
    fclose(g);
    return 0;
}