Pagini recente » Cod sursa (job #1004454) | Cod sursa (job #2436159) | Cod sursa (job #1894382) | Cod sursa (job #806639) | Cod sursa (job #1908061)
#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
FILE*f=fopen("triang.in","r");
FILE*g=fopen("triang.out","w");
int n,nr;
struct pct
{
double x,y;
}v[1510];
int cmp(pct a,pct b)
{
if (a.x<b.x||(fabs(a.x-b.x)<0.001&&a.y<b.y)) return 1;
else return 0;
}
double p(double x)
{
return x*x;
}
void cauta(double x, double y,int p)
{
int u=n,m;
while (p<u)
{
m=(p+u)/2;
if ((fabs(v[m].x-x)<0.001)&&(fabs(v[m].y-y)<0.001)) {nr++;return;}
else
if (v[m].x>x||(fabs(v[m].x-x)<0.001&&v[m].y>y)) u=m;
else p=m+1;
}
m=(p+u)/2;
if ((fabs(v[m].x-x)<0.001)&&(fabs(v[m].y-y)<0.001)) {nr++;return;}
}
int main()
{
int i,j;
double x,y,dx,dy,sin,cos;
sin=sqrt(3)/2.;
cos=0.5;
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
{
fscanf(f,"%lf%lf",&v[i].x,&v[i].y);
}
sort(v+1,v+n+1,cmp);
for (i=1;i<n;i++)
for (j=i+1;j<n;j++)
{
dx=v[j].x-v[i].x;
dy=v[j].y-v[i].y;
x=v[i].x+dx*cos-dy*sin;
y=v[i].y+dy*cos+dx*sin;
cauta(x,y,j+1);
x=v[i].x+dx*cos+dy*sin;
y=v[i].y+dy*cos-dx*sin;
cauta(x,y,j+1);
}
fprintf(g,"%d",nr);
fclose(f);
fclose(g);
return 0;
}