Pagini recente » Cod sursa (job #69783) | Cod sursa (job #28132) | Cod sursa (job #58657) | Cod sursa (job #2975657) | Cod sursa (job #1825308)
#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;
}