Cod sursa(job #1579421)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 24 ianuarie 2016 18:54:43
Problema Patrate 3 Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
struct elem{float x,y;};
elem v[1005];
bool cmp(elem a,elem b){
    if(a.x<b.x)
        return true;
    else
        if(a.x>b.x)
            return false;
        else//a.x==b.y
            if(a.y<b.y)
                return true;
            else//a.y>b.y
                return false;
}
bool egal(float a,float b){
    if(a-b<=0.00001&&a-b>=0)
        return true;
    if(b-a<=0.0001&&b-a>=0)
        return true;
    return false;
}
bool cautbin(float i,float j,int n){
    int l1=1,l2=n,mij;
    while(l1<=l2){
        mij=(l1+l2)/2;
        if(egal(v[mij].x,i)==true&&egal(v[mij].y,j)==true)
            return true;
        if(v[mij].x<i)
            l1=mij+1;
        if(v[mij].x>i)
            l2=mij-1;
        if(v[mij].x==i){
            if(v[mij].y<j)
                l1=mij+1;
            else
                l2=mij-1;
        }
    }
    return false;
}
int main(){
    FILE *fin,*fout;
    fin=fopen("patrate3.in","r");
    fout=fopen("patrate3.out","w");
    int i,j,n,cate=0;
    float mijx,mijy,difx,dify,x1,x2,y1,y2;
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(fin,"%f%f",&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++){
            mijx=(v[i].x+v[j].x)/2;
            mijy=(v[i].y+v[j].y)/2;
            difx=mijx-v[i].x;
            dify=mijy-v[i].y;
            if(v[i].y<v[j].y){
                x1=mijx+dify;
                y1=mijy-difx;
                x2=mijx-dify;
                y2=mijy+difx;
            }
            else{
                x1=mijx-dify;
                y1=mijy-difx;
                x2=mijx+dify;
                y2=mijy+difx;
            }
            if(cautbin(x1,y1,n)==true&&cautbin(x2,y2,n)==true)
                cate++;
        }
    fprintf(fout,"%d",cate);
    fclose(fin);
    fclose(fout);
    return 0;
}