Cod sursa(job #1677174)

Utilizator ASTELOTudor Enescu ASTELO Data 6 aprilie 2016 13:16:57
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
struct eu{float x,y;};
eu v[1501],m,p1,p2;
int n,i,j,k,nr;
float l,hh;
bool sorting(eu a,eu b)
    {
    if(a.x<b.x||a.x==b.x&&a.y<b.y)
        return 1;
    return 0;
    }
int main ()
{
freopen("triang.in","r",stdin);
freopen("triang.out","w",stdout);
scanf("%d",&n);
hh=sqrt(3);
for(i=1;i<=n;i++)
    scanf("%f%f",&v[i].x,&v[i].y);
sort(v+1,v+n+1,sorting);
for(i=1;i<n-1;i++)
    for(j=i+1;j<=n-1;j++)
        {
        m.x=(v[i].x+v[j].x)/2;
        m.y=(v[i].y+v[j].y)/2;
        l=sqrt((v[i].y-v[j].y)*(v[i].y-v[j].y)+(v[i].x-v[j].x)*(v[i].x-v[j].x));
        float panta;
        if(v[i].y==v[j].y)
            {
            p1.x=m.x;
            p1.y=m.y+l*hh/2;
            p2.x=m.x;
            p2.y=m.y-l*hh/2;
            }
        else
            {
            panta=(v[i].x-v[j].x)/(v[i].y-v[j].y);
            panta=(-1)/panta;
            float a,b,a1,b1;
            b=sqrt(3*l*l/(4*(panta*panta+1)));
            b1=-b;
            a=b*panta;
            a1=b1*panta;
            p1.x=m.x+a;
            p1.y=m.y+b;
            p2.x=m.x+a1;
            p2.y=m.y-b;
            }
        int l1=j+1,l2=n,mid,o=0;
        while(l1<=l2)
            {
            mid=(l1+l2)/2;
            if(v[mid].x==p1.x&&v[mid].y==p1.y)
                {
                o=mid;
                break;
                }
            if(v[mid].x<p1.x||v[mid].x==p1.x&&v[mid].y<p1.y)
                l1=mid+1;
            else
                l2=mid-1;
            }
        if(o!=0)
            nr++;
        l1=j+1;
        l2=n;
        o=0;
        while(l1<=l2)
            {
            mid=(l1+l2)/2;
            if(v[mid].x==p2.x&&v[mid].y==p2.y)
                {
                o=mid;
                break;
                }
            if(v[mid].x<p2.x||v[mid].x==p2.x&&v[mid].y<p2.y)
                l1=mid+1;
            else
                l2=mid-1;
            }
        if(o!=0)
            nr++;
        }
printf("%d",nr);
return 0;
}