poj1328[url]http://poj.org/problem?id=1328[/url]
比较简单的贪心,看代码,不细说了~
比较简单的贪心,看代码,不细说了~
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
struct Space
{
double left;
double right;
friend bool operator<(Space a,Space b)
{
return a.left<b.left;
}
};
Space space[1007];
int n,d;
int ans;
int caseCount=1;
void waterit()
{
ans=0;
int i;
double adjust=space[0].right;
ans++;
for(i=0;i<n-1;i++)
{
if(adjust<space[i+1].left)
{
ans++;
adjust=space[i+1].right;
}
else
{
if(adjust>space[i+1].right)
adjust=space[i+1].right;
}
}
cout<<"Case "<<caseCount<<": "<<ans<<endl;
caseCount++;
}
int main()
{
//ifstream cin("1.txt");
int i;
bool flag=true;
while(1)
{
cin>>n>>d;
if(n==0 && d==0)
break;
for(i=0;i<n;i++)
{
int a,b;
cin>>a>>b;
if(b>d && flag)
{
cout<<"Case "<<caseCount<<": "<<"-1"<<endl;
caseCount++;
flag=false;
}
space[i].left=a-sqrt(double(d*d-b*b));
space[i].right=a+sqrt(double(d*d-b*b));
}
if(flag)
{
sort(space,space+n);
waterit();
}
flag=true;
}
return 0;
}