Pagini recente » Cod sursa (job #773549) | Cod sursa (job #163012) | Cod sursa (job #12104) | Cod sursa (job #752913) | Cod sursa (job #773550)
Cod sursa(job #773550)
#include<iostream>
#include<cmath>
#include<fstream>
#include<algorithm>
using namespace std;
const double Error=0.001;
struct punct{double x,y;};
punct a[1600];
int n,sol;
int st,dr;
int cmp(punct A, punct B)
{
if (A.y<B.y)
return 1;
if (A.y==B.y)
if (A.x<B.x)
return 1;
return 0;
}
int cauta (punct A)
{
while (st<=dr)
{
int mij;
mij=(st+dr)/2;
//if (fabs(a[mij].y-A.y)<=Error)
/// if (fabs(a[mij].x-A.x)<=Error)
// return 1;
if (a[mij].y<A.y-Error)
st=mij+1;
else
if (A.y+Error<a[mij].y)
dr=mij-1;
else
if (a[mij].x<A.x-Error)
st=mij+1;
else
if (a[mij].x>A.x+Error)
dr=mij-1;
else
return 1;
}
return 0;
}
int main(void)
{
fstream f,g;
f.open("triang.in",ios::in);
g.open("triang.out",ios::out);
f>>n;
int i,j;
double sin60=sqrt(3+0.0)/2, cos60=0.5;
for (i=1;i<=n;i++)
f>>a[i].x>>a[i].y;
sort(a+1,a+1+n,cmp);
for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{
punct C;
C.x= a[i].x+cos60*(a[j].x-a[i].x)+sin60*(a[i].y-a[j].y);
C.y=a[i].y+sin60*(a[j].x-a[i].x)+cos60*(a[j].y-a[i].y);
st=1;
dr=n;
if (cauta(C))
sol++;
C.x= a[i].x+cos60*(a[j].x-a[i].x)-sin60*(a[i].y-a[j].y);
C.y=a[i].y-sin60*(a[j].x-a[i].x)+cos60*(a[j].y-a[i].y);
st=1;
dr=n;
if (cauta(C))
sol++;
}
g<<sol/3;
}