您的位置:首页 > 其它

POJ 1328

2015-07-11 13:25 190 查看
//花了一上午时间做这道题,还是没想出来咋做。。。,看了别人的博客后,才知道,原来是这样做的。先以每个岛为圆心划圆,记录其与X轴的交点,分别记为去去q[i].x,q[i].y,让后在以左交点排序。让后在扫描一遍,接下来就是纯数学了//

#include<stdio.h>

#include<math.h>

struct node

{

double a;

double b;

} q[10000];

int main()

{

int n,d;

int k=1;

int sum;

while(scanf("%d%d",&n,&d)!=EOF&&(n||d))

{

int i,j;

int x,y;

int flag=0;

sum=1;

for(i=0; i<n; i++)

{

scanf("%d%d",&x,&y);

if(y>d)

flag=1;

q[i].a=x-sqrt((double)(d*d-y*y));

q[i].b=x+sqrt((double)(d*d-y*y));

}

if(flag)

{

printf("Case %d: %d\n",k++,-1);

continue;

}

double tmp,temp;

for(i=0; i<n; i++)

{

for(j=0; j<n-i-1; j++)

{

if(q[j].a>q[j+1].a)

{

tmp=q[j].a;

q[j].a=q[j+1].a;

q[j+1].a=tmp;

tmp=q[j].b;

q[j].b=q[j+1].b;

q[j+1].b=tmp;

}

}

}

temp=q[0].b;

for(i=1; i<n; i++)

{

if(q[i].a>temp)

{

sum++;

temp=q[i].b;

}

else if(q[i].b<temp)

{

temp=q[i].b;

}

}

printf("Case %d: %d\n",k++,sum);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: