Cod sursa(job #2887384)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 9 aprilie 2022 15:08:36
Problema Triang Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <cmath>
#include <algorithm>
#define prec 0.001

using namespace std;
ifstream fin("triang.in");
ofstream fout("triang.out");
struct kys {double x,y;} a[1501];
int n,nr;
double k,s,xc,yc;
bool compare(kys a,kys b)
{
    return(fabs(a.x-b.x)<prec&&a.y<b.y||a.x<b.x);
}
void cauta(double xc,double yc)
{
    int st,dr,mid;
    st=1;dr=n;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(fabs(a[mid].x-xc)<prec&&fabs(a[mid].y-yc)<prec)
        {
            nr++;
            return;
        }
        else if(a[mid].x>xc||fabs(a[mid].x-xc)<prec&&a[mid].y>yc)dr=mid-1;
        else st=mid+1;
    }
}
int main()
{
    fin>>n;
    for(int i=1; i<=n; i++)fin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1,compare);
    for(int i=1; i<=n; i++)
    {
        for(int j=i+1; j<=n; j++)
        {
            k=a[j].x-a[i].x;
            s=a[j].y-a[i].y;
            xc=a[i].x+k/2-sqrt(3)/2*s;
            yc=a[i].y+sqrt(3)/2*k+s/2;
            cauta(xc,yc);
            xc=a[i].x+k/2+sqrt(3)/2*s;
            yc=a[i].y-sqrt(3)/2*k+s/2;
            cauta(xc,yc);
        }
    }
    fout<<nr/3;
    return 0;
}