Pagini recente » Cod sursa (job #1795306) | Borderou de evaluare (job #868045) | Cod sursa (job #1359511) | Cod sursa (job #1964332) | Cod sursa (job #1957295)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#define MaxN 1505
#define MaxM 10007
#define rad3 1.7320508075688772935274463415059
#define eps 0.001
#define PI 3.1415926535897932384626433832795
using namespace std;
FILE*IN,*OUT;
int N,cnt=0;
double x,y;
struct Point
{
long long x,y;
}v[MaxN];
vector <Point>H[MaxM];
void Add(Point p)
{
long long S=abs(p.x*p.y);
S%=MaxM;
H[S].push_back(p);
}
bool Search(long long x,long long y)
{
long long S=abs(x*y);
S%=MaxM;
for(int i=0;i<H[S].size();i++)
if(abs(H[S][i].x-x)<=eps&&abs(H[S][i].y-y)<=eps)
return true;
return false;
}
int main()
{
IN=fopen("triang.in","r");
OUT=fopen("triang.out","w");
fscanf(IN,"%d",&N);
for(int i=1;i<=N;i++)
{
fscanf(IN,"%lf%lf",&x,&y);
v[i].x=x*2000,v[i].y=y*2000;
Add(v[i]);
}
for(int i=1;i<=N;i++)
for(int j=i+1;j<=N;j++)
{
double dist=pow(pow(v[i].x-v[j].x,2.0)+pow(v[i].y-v[j].y,2.0),0.5);
double angle=atan2((double)v[j].y-v[i].y,(double)v[j].x-v[i].x);
long long x=(v[i].x+v[j].x)/2,y=(v[i].y+v[j].y)/2;
int sign=1;
if(cos(angle+PI/2)*sin(angle+PI/2)<0)
sign=-1;
if(Search(x+cos(angle+PI/2)*dist*rad3/2,y+sign*sin(angle+PI/2)*dist*rad3/2))
cnt++;
if(Search(x-cos(angle+PI/2)*dist*rad3/2,y-sign*sin(angle+PI/2)*dist*rad3/2))
cnt++;
}
fprintf(OUT,"%d",cnt/3);
return 0;
}