Pagini recente » Cod sursa (job #58731) | Cod sursa (job #1740192) | Cod sursa (job #1948488) | Cod sursa (job #122583) | Cod sursa (job #315780)
Cod sursa(job #315780)
#include<stdio.h>
#include<math.h>
struct pct{double x,y;}a[1111],a0,a1,a2,a3,mij,d;
long n,i,st,dr,j,gas,m,nr;
long partit(pct a[ ],long st, long dr)
{long i,j,m;
pct piv,aa;
m=(st+dr)/2;
piv=a[m];
i=st-1;
j=dr+1;
while(1)
{do{++i;} while(a[i].x<piv.x||(fabs(a[i].x-piv.x)<=0.00001&&a[i].y<piv.y));
do{--j;} while(a[j].x>piv.x||(fabs(a[j].x-piv.x)<=0.00001&&a[j].y>piv.y));
if (i<j)
{aa=a[i];a[i]=a[j];a[j]=aa;}
else
return j;
}
}
void quicks(pct a[ ],long st,long dr)
{long p;
if (st<dr)
{p=partit(a,st,dr);
quicks(a,st,p);
quicks(a,p+1,dr);
}
}
int main()
{
freopen("patrate3.in","r",stdin);
freopen("patrate3.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;++i)
scanf("%lf%lf",&a[i].x,&a[i].y);
quicks(a,1,n);
for(i=1;i<=n;++i)
for(j=i+1;j<=n;++j)
if((a[i].x<a[j].x&&a[i].y>a[j].y)||(a[i].x>a[j].x&&a[i].y<a[j].y)||(fabs(a[i].x-a[j].x)<=0.00001&&fabs(a[i].y-a[j].y)<=0.00001))
{a0=a[i];
a1=a[j];
mij.x=(a0.x+a1.x)/2;
mij.y=(a0.y+a1.y)/2;
d.x=fabs(mij.x-a0.x);
d.y=fabs(mij.y-a0.y);
a2.x=mij.x-d.y;
a2.y=mij.y-d.x;
st=1;dr=n;
gas=0;
while(st<=dr)
{m=(st+dr)/2;
if(fabs(a[m].x-a2.x)<=0.00001&&fabs(a[m].y-a2.y)<=0.00001){gas=m;break;}
if(a[m].x<a2.x||(fabs(a[m].x-a2.x)<=0.00001&&a[m].y<a2.y))st=m+1;
else dr=m-1;}
if(gas)
{a3.x=mij.x+d.y;
a3.y=mij.y+d.x;
st=1;dr=n;
gas=0;
while(st<=dr)
{m=(st+dr)/2;
if(fabs(a[m].x-a3.x)<=0.00001&&fabs(a[m].y-a3.y)<=0.00001){gas=m;break;}
if(a[m].x<a3.x||(fabs(a[m].x-a3.x)<=0.00001&&a[m].y<a3.y))st=m+1;
else dr=m-1;}
if(gas)++nr;}}
printf("%ld",nr);
return 0;
}