Cod sursa(job #42967)
#include <fstream.h>
#include <math.h>
#include <stdio.h>
FILE* fout;
struct pct {long x,y;};
pct a[1001];
long aux,x0,yp,x1,ys,x2,y2,x3,y3,mijx,mijy,dx,dy;
int viz[100][100],g1,g2;
long comp(double cm1, double cm2)
{
if (cm2-cm1>-0.00001&&cm2-cm1<0.00001) return 0;
return 1;
}
int main()
{int i,n,k,ok,j,p=0;
long xxi,yyi,m1=0,m2=0;
double xx,yy;
ifstream fin("patrate3.in");
fout=fopen("patrate3.out","wt");
fin>>n;
for (i=0;i<n;i++)
{
fin>>xx>>yy;
xx*=1000000;
xxi=xx;
yy*=1000000;
yyi=yy;
if (comp(xxi,xx)) xxi++;
if (comp(yyi,yy)) yyi++;
a[i].x=xxi;
a[i].y=yyi;
}
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{
if ((viz[i][j]==0))
{
x0=a[i].x;
yp=a[i].y;
x1=a[j].x;
ys=a[j].y;
if (x0>x1)
{
aux=x1;
x1=x0;
x0=aux;
aux=ys;
ys=yp;
yp=aux;
}
mijx=(x0+x1)/2;
mijy=(yp+ys)/2;
dx=mijx-x0;
dy=mijy-yp;
if(dx<0) dx*=-1;
if(dy<0) dy*=-1;
if (yp<ys)
{
x2=mijx+dy;
y2=mijy-dx;
x3=mijx-dy;
y3=mijy+dx;
}
else
{
x2=mijx-dy;
y2=mijy-dx;
x3=mijx+dy;
y3=mijy+dx;
}
ok=0;
g2=g1=1;
for (k=0;k<=(n-1)/2;k++)
{
if (x2==a[k].x&&y2==a[k].y&&g1){g1=0; ok++; m1=k;}
else
if (x2==a[n-k-1].x&&y2==a[n-k-1].y&&g1) {g1=0; ok++; m1=n-k-1;}
if (x3==a[k].x&&y3==a[k].y&&g2) {g2=0; ok++; m2=k;}
else
if (x3==a[n-k-1].x&&y3==a[n-k-1].y&&g2){g2=0; ok++; m2=n-k-1;}
if (ok==2) break;
}
if (ok>=2)
{
p++;
viz[m1][m2]=viz[m2][m1]=p;
}
}
}
fprintf(fout,"%d\n",p);
return 0;
}