簡単な欲張りpoj 1328
1597 ワード
この問題について、私が言いたいのはやはり練習した問題が少なくなったので、いつも考えが行き届いていないということです.
#include<iostream>
#include<cmath>
using namespace std;
typedef struct fun
{
double x,y;
}rr;
fun a[1005];
bool vis[1005];
int cmp(const void *a,const void *b)
{
fun *c=(fun *)a;
fun *d=(fun *)b;
if(c->x==d->x)
return c->y>d->y?-1:1;
else
return c->x>d->x?1:-1;
}
int main()
{
int n,i,sign,Count=0,sum;
double d,t,x,mi,ma;
while(1)
{
Count++;
sign=0;
cin>>n>>d;
if(n==0 && d==0)
break;
for(i=0; i<n; i++)
{
cin>>a[i].x>>a[i].y;
if(a[i].y>d)
sign=1;//
}
if(sign==1)
{
cout<<"Case "<<Count<<": "<<"-1"<<endl;
continue;
}
qsort(a,n,sizeof(fun),cmp);
i=0;
sum=0;
while(i<n)
{
sum++;
x=a[i].x+sqrt(d*d-a[i].y*a[i].y);//
while(1)
{
i++;
if(i>=n)
break;
mi=a[i].x-sqrt(d*d-a[i].y*a[i].y);
ma=a[i].x+sqrt(d*d-a[i].y*a[i].y);//
if(mi>x)
break;
if(ma<x)
x=ma;
}
}
cout<<"Case "<<Count<<": "<<sum<<endl;
}
return 0;
}