Cod sursa(job #1825308)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 8 decembrie 2016 22:59:12
Problema Triang Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <algorithm>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
double Pi=acos(-1.0),eps=0.001;
double c60=cos(60*Pi/180.0), s60=sin(60*Pi/180.0),x,y;
int i,n,k,X[1501],Y[1501],j;
long long nr=0;
struct caa
{
    double x,y;
}P[1501];
int cmp(caa P1, caa P2)
{
    if(P1.x<P2.x) return 1;
    else if(P1.x>P2.x) return 0;
    if(P1.y<P2.y) return 1;
    return 0;
}
int cautbin(int st,double x, double y)
{
    int ult=n,mij=(st+ult)/2;
    while(st<=ult)
    {
        mij=(st+ult)/2;
        if(P[mij].x-x<=eps&&P[mij].x-x>=-eps&&P[mij].y-y<=eps&&P[mij].y-y>=-eps)
        {
            return 1;
        }
        else
        {
            if(P[mij].x<x) st=mij+1;
            else ult=mij-1;
        }
    }
    return 0;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>P[i].x>>P[i].y;
    }
    sort(P+1,P+n+1,cmp);
    for(i=1;i<=n-2;i++)
        for(j=i+1;j<=n-1;j++)
        {
            x=c60*(P[j].x+P[i].x)+s60*(P[j].y-P[i].y);
            y=s60*(P[i].x-P[j].x)+c60*(P[j].y+P[i].y);
            nr+=cautbin(j+1,x,y);
            x=c60*(P[j].x+P[i].x)+s60*(P[i].y-P[j].y);
            y=s60*(P[j].x-P[i].x)+c60*(P[j].y+P[i].y);
            nr+=cautbin(j+1,x,y);
        }
    g<<nr;
    return 0;
}