poj 1328

来源:互联网 发布:java字典表 编辑:程序博客网 时间:2024/05/22 05:58

2014/12/10


太渣,错了很多次。。贪心贪吧,贪吧。

一个个遍历算半径会有精度问题,要一开始就算出点的所在的左右半径中心。。


#include<stdio.h>#include<string.>#include<algorithm>#include<math.h>using namespace std;double d;struct node{double l,r;}s[1005];int cmp(node a,node b){return a.l<b.l;}int main(){int n;int k = 1;double a,b;while(~scanf("%d%lf",&n,&d)&&n&&d){int temp = 0;for(int i =0 ;i < n; i++){scanf("%lf%lf",&a,&b);if(fabs(b) > d){temp = 1;}s[i].l = a-sqrt(d*d-b*b);s[i].r = a+sqrt(d*d-b*b);}if(temp){printf("Case %d: -1\n",k++);continue;}sort(s,s+n,cmp);     double point ;  int cnt = 1;  point = s[0].r;for(int i = 1;i < n; i++){if(point < s[i].l){     point  = s[i].r;     cnt++;}else if(point > s[i].r){point = s[i].r;}}printf("Case %d: %d\n",k++,cnt);}return 0;} 


0 0