应该在整个n里贪心
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
struct Node{
double O, R;
double f, l;
int flag;
bool operator<( const Node &b )const{
if( f != b.f ){
return f < b.f;
}else{
return l < b.l;
}
}
};
int main(){
int N, min_ans;
double L, W;
Node node[10000];
while( scanf( "%d%lf%lf", &N, &L, &W ) != EOF ){
for( int i = 0; i < N; i++ ){
scanf( "%lf%lf", &node[i].O, &node[i].R );
double temp = node[i].R * node[i].R - W * W / 4.0;
node[i].f = node[i].O - sqrt( temp );
node[i].l = node[i].O + sqrt( temp );
}
sort( node, node + N );
min_ans = 0;
double pre = 1e-8, temp = 1e-8;
while( temp < L ){
temp = 1e-8;
for( int i = 0; i < N && node[i].f <= pre; i++ ){
temp = max( temp, node[i].l );
}
if( temp <= pre ){
min_ans = -1;
break;
}else{
min_ans++;
pre = temp;
}
}
cout << min_ans << endl;
}
return 0;
}