Pagini recente » Cod sursa (job #239698) | Cod sursa (job #619937) | Cod sursa (job #401158) | Cod sursa (job #2413688) | Cod sursa (job #1956933)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#define MaxN 1505
#define MaxM 10007
#define rad3 1.732050807568877
#define eps 0.001
#define PI 3.141592
using namespace std;
FILE*IN,*OUT;
int N,cnt=0;
struct Point
{
double x,y;
}v[MaxN];
vector <Point>H[MaxM];
void Add(Point p)
{
long long S=1000*abs(p.x*p.y);
S%=MaxM;
H[S].push_back(p);
}
bool Search(double x,double y)
{
long long S=1000*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",&v[i].x,&v[i].y);
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(v[j].y-v[i].y,v[j].x-v[i].x)*180/PI;
double x=(v[i].x+v[j].x)/2,y=(v[i].y+v[j].y)/2;
if(Search(x+cos((angle+90)/180*PI)*dist*rad3/2,y+sin((angle+90)/180*PI)*dist*rad3/2))
cnt++;
if(Search(x+cos((angle-90)/180*PI)*dist*rad3/2,y+sin((angle-90)/180*PI)*dist*rad3/2))
cnt++;
}
fprintf(OUT,"%d",cnt/3);
return 0;
}