Pagini recente » Cod sursa (job #1366492) | Cod sursa (job #50089) | Cod sursa (job #549537) | Cod sursa (job #1276580) | Cod sursa (job #3002368)
#include <fstream>
#include <cmath>
#include <algorithm>
#define eps 1e-3
using namespace std;
ifstream f("triang.in");
ofstream g("triang.out");
int n,m,sol;
const int N=1505;
double sin60;
struct pct
{
double x,y;
}a[N];
bool cmp(pct X,pct Y)
{
if(X.x==Y.x)
return X.y<Y.y;
return X.x<Y.x;
}
bool binary_(pct x)
{
int st=1,dr=n;
while(st<=dr)
{
int mj=(st+dr)/2;
if(a[mj].x<x.x-eps)
st=mj+1;
else
if(fabs(a[mj].x-x.x)<=eps)
{
if(a[mj].y<=x.y||fabs(a[mj].y-x.y)<=eps)
st=mj+1;
else
dr=mj-1;
}
else
dr=mj-1;
}
if(fabs(a[st-1].x-x.x)<=eps&&fabs(a[st-1].y-x.y)<=eps)
return true;
return false;
}
void solve(pct a, pct b)
{
double lenght=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
///lung laturii
pct mj={(a.x+b.x)/2,(a.y+b.y)/2};
///mij lat
///2 var sus jos calc DX, DY
double cosX=(b.x-a.x)/lenght;
double sinX=(b.y-a.y)/lenght;
double dy= lenght*sin60*cosX;
double dx= lenght*sin60*sinX;
///primul pct
pct c={mj.x+dx,mj.y-dy};
pct d={mj.x-dx,mj.y+dy};
if(binary_(c))
sol++;
if(binary_(d))
sol++;
}
int main()
{
f>>n;
sin60=sqrt(3.0/4);
for(int i=1;i<=n;i++)
f>>a[i].x>>a[i].y;
sort(a+1,a+n+1,cmp);
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{
solve(a[i],a[j]);
}
g<<sol/3;
return 0;
}