poj1328为什么我狂wa?
#include<iostream>
#include<cmath>
using namespace std;
struct seg
{
double left , right;
}p[1000];
int n , d , maxr , cnt , c = 1 , x , y;
bool imp;
int myCom ( const void * e1 , const void * e2 )
{
seg * p1 = ( seg * ) e1 ;
seg * p2 = ( seg * ) e2 ;
if ( p1->left != p2->left )
return (p1->left - p2->left)>0?1:-1 ;
else
return (p1->right - p2->right)>0 ? 1:-1;
}
int main()
{
while ( scanf("%d %d" , &n , &d ))
{
if ( n== 0 && d== 0 )
break;
imp = false; //判断是否可能
for ( int i = 0 ; i < n ; ++ i )
{
scanf("%d %d" , &x , &y);
if ( abs(y) > abs(d) )
imp = true;
p[i].left = x - sqrt(double(d*d-y*y));
p[i].right = x + sqrt(double(d*d-y*y));
}
if ( imp )
printf("Case %d: -1\n" , c++);
qsort( p , n , sizeof(seg) , myCom);
cnt = 1 ;
maxr = p[0].right ;
for ( int i = 1 ; i < n ; ++ i )
{
if ( p[i].left > maxr )
{
++ cnt;
maxr = p[i].right ;
}
else if ( p[i].right < maxr )
maxr = p[i].right ;
}
printf("Case %d: %d\n" , c++ , cnt );
}
return 0;
}