Cod sursa(job #1149353)

Utilizator tannous.marcTannous Marc tannous.marc Data 21 martie 2014 18:43:54
Problema Patrate 3 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
#define eps 1.e-14
struct punct{
    float x,y;
};
int cnt=0,n;
    punct v[1001];
bool comp(punct a,punct b){
    if(fabs(a.x-b.x)>=eps)
        return a.x-b.x<eps;
    return a.y-b.y<eps;
}
void cauta(punct a,punct b){
    punct c;
    punct d;
    float delta;
    delta=fabs( (b.x-a.x)-fabs((b.y-a.y)) / 2 );
    c.x=b.x-delta;
    d.x=a.x+delta;
        if(a.y>b.y)
        {
            c.y=a.y-delta;
            d.y=b.y+delta;
        }
        else
        {
            c.y=b.y-delta;
            d.y=a.y+delta;
        }
    int st=1,dr=n,mij;
    int valid1=0,valid2=0;
    while(st<=dr)
    {
        mij=(st+dr)/2;
            if(v[mij].x==a.x && v[mij].y==a.y){
                 valid1=1;
                 break;
            }
            else {
                if(comp(v[mij],a)==1) st=mij+1;
                else dr=mij-1;
            }
    }
    st=1;
    dr=n;
    while(st<=dr)
    {
        mij=(st+dr)/2;
            if(v[mij].x==b.x && v[mij].y==b.y){
                 valid2=1;
                 break;
            }
            else {
                if(comp(v[mij],a)==1) st=mij+1;
                else dr=mij-1;
            }
    }
    if(valid1==1 && valid2==1) cnt++;
}
int main()
{
    ifstream in("patrate3.in");
    ofstream out("patrate3.out");
    in>>n;

        for(int i=1;i<=n;i++)
            in>>v[i].x>>v[i].y;
    sort(v+1,v+n+1,comp);

        for(int i=1;i<n;i++)
            for(int j=i+1;j<=n;j++)
                cauta(v[i],v[j]);
    out<<cnt/7;
            return 0;
}