Pagini recente » Cod sursa (job #62479) | Cod sursa (job #1220664) | Cod sursa (job #1922045) | Cod sursa (job #994543)
Cod sursa(job #994543)
#include<stdio.h>
#include<cmath>
#include<set>
#define lb lower_bound
#define mp make_pair
#define x first
#define y second
#define eps 0.001
#define maxn 1505
using namespace std;
typedef pair<double,double> point;
int n,sol;
point p[maxn];
set <point> arb;
double c6=cos(1.0*M_PI/3),s6=sin(1.0*M_PI/3);
void read()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lf%lf",&p[i].x,&p[i].y);
arb.insert(mp(p[i].x,p[i].y));
}
}
void rotate(point &a)
{
point r;
r.x=a.x*c6-a.y*s6; r.y=a.x*s6+a.y*c6;
a=r;
}
int check(point a)
{
set<point>::iterator it=arb.lb(mp(a.x-eps,a.y-eps));
if(fabs((*it).x-a.x)<=eps && fabs((*it).y-a.y)<=eps) return 1;
return 0;
}
void solve()
{
int i,j;
point a;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
{
a.x=p[j].x-p[i].x; a.y=p[j].y-p[i].y;
rotate(a); a.x+=p[i].x; a.y+=p[i].y;
sol+=check(a);
a.x=p[i].x-p[j].x; a.y=p[i].y-p[j].y;
rotate(a); a.x+=p[j].x; a.y+=p[j].y;
sol+=check(a);
}
sol/=3;
}
int main()
{
freopen("triang.in","r",stdin);
freopen("triang.out","w",stdout);
read();
solve();
printf("%d",sol);
fclose(stdin);
fclose(stdout);
return 0;
}