Cod sursa(job #1083519)

Utilizator tavi.belu1994FMI Belu Andrei Octavian tavi.belu1994 Data 16 ianuarie 2014 01:25:21
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <cmath>
#include <algorithm>
FILE *f,*g;
using namespace std;

double eps=0.0001;
int n, nr, i, j;

struct punct{
    double x,y;
}a,b,v[1001];

bool cmp(punct p,punct q)
{   if(abs(p.x-q.x) < eps) return p.y<q.y;
    return p.x<q.x;
}
bool cauta(punct a)
{   int mij,st=1,dr=n;
    while(st <= dr)
    {   mij = (st+dr)/2;
        if(abs(v[mij].x-a.x) < eps && abs(v[mij].y-a.y) < eps)
            return true;
        if(cmp(v[mij],a))
            st=mij+1;
        else
            dr=mij-1;
    }
    return false;
}
int main(){
    f=fopen("patrate3.in","r");
    g=fopen("patrate3.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%lf %lf",&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++)
        {   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(cauta(a) && cauta(b)) nr++;
        }
    fprintf(g,"%d",nr/2);
    fclose(f);
    fclose(g);
    return 0;
}