Pagini recente » Cod sursa (job #1673257) | Cod sursa (job #986928) | Cod sursa (job #1052581) | Cod sursa (job #857180) | Cod sursa (job #42195)
Cod sursa(job #42195)
#include <stdio.h>
#include <math.h>
#include <fstream.h>
FILE *fout;
struct pct{double x,y;
};
pct a[1001],b[1001];
int n,i,j,d,s,mij,ok,p;
void merge (int l, int r)
{int m=(l+r)>>1,i,j,k;
if (l==r) return;
merge(l,m);
merge(m+1,r);
for (i=l,j=m+1,k=l;i<=m||j<=r;)
{
if (j>r||(i<=m&&a[i].x<a[j].x))
b[k++]=a[i++];
else if (j>r||(i<=m&&a[i].x==a[j].x))
{
if (a[i].y<a[j].y)
b[k++]=a[i++];
else b[k++]=a[j++];
}
else b[k++]=a[j++];
}
for (k=l;k<=r;k++) a[k]=b[k];
}
int main()
{double mijx,mijy,dx,dy,x0,y0,x1,y1,x2,x3,y2,y3;
int m;
ifstream fin("patrate3.in");
fout=fopen("patrate3.out","wt");
fin>>n;
for (i=0;i<n;i++)
fin>>a[i].x>>a[i].y;
merge(0,n-1);
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
{
x0=a[i].x;
x1=a[j].x;
y0=a[i].y;
y1=a[j].y;
mijx=(x0+x1)/2;
mijy=(y0+y1)/2;
dx=mijx-x0;
dy=mijy-y0;
if(dx<0) dx*=-1;
if(dy<0) dy*=-1;
if (y0<y1)
{
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;
s=0;
d=n-1;
while (m!=d-1)
{m=(s+d)>>1;
if (a[s].x==x2)
if (a[s].y==y2)
{
ok++;
break;
}
if (a[d].x==x2)
if (a[d].y==y2)
{
ok++;
break;
}
if(a[m].x<x2)
s=m;
else if(a[m].x>x2)
d=m;
else
{
if (a[m].y==y2)
{
ok++;
break;
}
else if (a[m].y<y2)
s=m;
else d=m;
}
}
s=0;
d=n-1;
m=n/2;
while (m!=d-1&&ok==1)
{m=(s+d)>>1;
if (a[s].x==x3)
if (a[s].y==y3)
{
ok++;
break;
}
if (a[d].x==x3)
if (a[d].y==y3)
{
ok++;
break;
}
if(a[m].x<x3)
s=m;
else if(a[m].x>x3)
d=m;
else
{
if (a[m].y==y3)
{
ok++;
break;
}
else if (a[m].y<y3)
s=m;
else d=m;
}
}
if (ok==2) p++;
}
fprintf(fout,"%d\n",p);
fcloseall();
return 0;
}