您的位置:首页 > 其它

zoj1360||poj1328

2012-04-30 10:40 363 查看
程序没有大概,目标是完全理解某一种算法,比如这道题的快排算法,继续努力吧

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int n,d;
double pl[1005],pr[1005];

void kp(int L,int R)
{
double m1=pl[L+R>>1],m2=pr[L+R>>1];
int i=L,j=R;
double key;

while(i<j)
{
while(pr[i]<m2) i++;
while(pr[j]>m2) j--;
if(i<=j)
{
key=pr[i];
pr[i]=pr[j];
pr[j]=key;
key=pl[i];
pl[i]=pl[j];
pl[j]=key;
++i;j--;
}
}
if(i<R)  kp(i,R);
if(j>L)  kp(L,j);
}

int main()
{

int x,y;
double temp;
int i;
int flag;
int count;
int count_n=0;
double place;

while(scanf("%d%d",&n,&d)==2)
{
if(n==0&&d==0)
break;
count=0;
flag=0;
count_n++;
memset(pl,0,sizeof(pl));
memset(pr,0,sizeof(pr));
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
if(y>d)
{
flag=1;
}
temp=d*d-y*y;
temp=sqrt(temp);
pl[i]=x-temp;
pr[i]=x+temp;
}

if(flag)
{
printf("Case %d: -1\n",count_n);
}
else
{
while(n)
{
kp(1,n);
place=pr[1];
for(i=1;i<=n;)
{
if(pl[i]<=place&&pr[i]>=place)
{
pl[i]=pl
;
pr[i]=pr
;
n--;
}
else
i++;
}
count++;
}
printf("Case %d: %d\n",count_n,count);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: