Cod sursa(job #1247594)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 23 octombrie 2014 00:07:00
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
#define eps 0.0000001
using namespace std;
struct pct{
    double x;
    double y;
}v[10100];
int n,i,j,s;
double x,y,x2,y2,x3,y3,d=sqrt(3);
FILE *f,*g;
int cmp(pct a,pct b){
    if(a.x!=b.x)
        return a.x<b.x;
    return a.y<b.y;
}
double mod(double a){
   if(a<0)
        return -a;
   return a;
}
void cbin(double x,double y){
    int p=j+1,u=n,mid;
    while(p<=u){
        mid=(p+u)/2;
        if(v[mid].x<x)
            p=mid+1;
        else{
            if(v[mid].x>x)
                u=mid-1;
            else{
                if(v[mid].y<y)
                    p=mid+1;
                else
                    u=mid+1;
            }
        }
    }
    if(mod(x-v[p].x)<eps&&mod(y-v[p].y)<eps)
        s++;
}
int main(){
    f=fopen("triang.in","r");
    g=fopen("triang.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-2;i++){
        x=v[i].x;
        y=v[i].y;
        for(j=i+1;j<=n-1;j++){
            x2=v[j].x;
            y2=v[j].y;
            x3=(x+x2)/2+d*(y-y2)/2;
            y3=(y+y2)/2+d*(x2-x)/2;
            cbin(x3,y3);
            x3=(x+x2)/2+d*(y2-y)/2;
            y3=(y+y2)/2+d*(x-x2)/2;
            cbin(x3,y3);
        }
    }
    fprintf(g,"%d",s);

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