Cod sursa(job #2557995)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 26 februarie 2020 10:38:31
Problema Triang Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <cmath>
#include <algorithm>

using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
double t,s,xc,yc;
struct cv{double x,y;}v[1501];
int n,i,j,nr;
int comp(cv a,cv b)
{
    return (fabs(a.x-b.x)<0.001 && a.y<b.y || a.x<b.x);
}
void cautbinar(double xc,double yc)
{
    int p=1,u=n,m;
    while(p<=u)
    {
        m=(p+u)/2;
        if(fabs(v[m].x-xc)<0.001 && fabs(v[m].y-yc)<0.001) {nr++;return;}
        else if(v[m].x>xc || fabs(v[m].x-xc)<0.001 && v[m].y>yc) u=m-1;
        else p=m+1;
    }
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++) f>>v[i].x>>v[i].y;
    sort(v+1,v+n+1,comp);
    for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
    {
        t=v[j].x-v[i].x;
        s=v[j].y-v[i].y;
        xc=v[i].x+t/2-sqrt(3)/2*s;
        yc=v[i].y+sqrt(3)/2*t+s/2;
        cautbinar(xc,yc);
        xc=v[i].x+t/2+sqrt(3)/2*s;
        yc=v[i].y-sqrt(3)/2*t+s/2;
        cautbinar(xc,yc);
    }
    g<<nr/3;
    return 0;
}