UVA10308

struct Line{
       double _left ;
       double _right ;
       Line(){}
       Line(double l , double r):_left(l) , _right(r){}
       friend bool operator < (const Line& a , const Line& b){
            if(a._left != b._left) return a._left < b._left ;
            else  return a._right > b._right ;
       }
};

double L , W  ;
int n  ;
vector<Line> g ;

int  DP(){
     sort(g.begin() , g.end()) ;
     int k = 0 ;
     if(g[0]._left > 0)  return -1 ;
     double _right = 0 , next_right = 0 ;

     int idx = 0 ;
     while(idx < g.size()){
          int i = idx ;
          while(i < g.size() && g[i]._left<= _right){
                next_right = max(next_right , g[i]._right) ;
                i++ ;
          }
          if(i == idx) return -1 ;
          _right = next_right ;
          idx = i ;
          k++ ;
          if(_right >= L) return k ;
     }
     return -1 ;
}

int  main(){
     int i  ;
     double x , y , r ;
     while(cin>>n>>L>>W){
          g.clear() ;
          for(i = 0 ; i < n ; i++){
              scanf("%lf%lf" ,&x , &r) ;
              if(r > W/2){
                  double d = sqrt(r*r - W*W/4) ;
                  g.push_back(Line(x - d , x + d)) ;
              }
          }
          cout<< DP() << endl ;
     }
     return 0 ;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值