zoukankan      html  css  js  c++  java
  • 箭术 (Archery,Seoul 2008,LA 4253)

     1 #include <iostream>
     2 #include <string.h>
     3 #include <string>
     4 #include <fstream>
     5 #include <algorithm>
     6 #include <stdio.h>
     7 #include <vector>
     8 #include <queue>
     9 using namespace std;
    10 const double eps = 1e-8;
    11 #define MAXN 5005
    12 struct Target{
    13     long double y,l,r;
    14     Target(long double _y = 0.0, long double _l = 0.0, long double _r = 0.0) {
    15          y = _y, l = _l, r = _r;
    16          if (l > r) swap(l, r);
    17      }
    18 };
    19 vector<Target> rec;
    20 bool cmp(Target a, Target b) {
    21      return a.y < b.y;
    22  }
    23 
    24  int test(long double x) {
    25      long double L = (rec[0].l - x - eps) / rec[0].y, R = (rec[0].r - x + eps) / rec[0].y;
    26      for(int i=1;i<=(rec.size()- 1);i++) {
    27          long double tmpL = (rec[i].l - x - eps) / rec[i].y, tmpR = (rec[i].r - x + eps) / rec[i].y;
    28          if (R < tmpL) return 1;
    29          if (tmpR < L) return -1;
    30          L = max(tmpL, L), R = min(tmpR, R);
    31      }
    32      return 0;
    33  }
    34 
    35 bool bs(long double w)
    36 {
    37     long double l=0, r = w, m;
    38     while (r - l > eps) {
    39          m = (l + r) / 2.0;
    40          int res = test(m);
    41          if (res == 0) {
    42  //            cout << m << endl;
    43              return true;
    44          } else if (res == -1) l = m;
    45          else r = m;
    46      }
    47      return false;
    48 }
    49 int main()
    50 {
    51     int W,T,n;
    52     scanf("%d",&T);
    53     while(T--)
    54     {
    55         scanf("%d",&W);
    56         scanf("%d",&n);
    57         long double D,L,R;
    58         rec.clear();
    59         for(int i=0;i<n;i++)
    60         {
    61             cin>>D>>L>>R;
    62             rec.push_back(Target(D,L,R));
    63         }
    64         sort(rec.begin(),rec.end(),cmp);
    65         bs(W) ? puts("YES") : puts("NO");
    66     }
    67 
    68 
    69     return 0;
    70 }

    http://www.cnblogs.com/LyonLys/archive/2013/03/04/LA_4253_Lyon.html

    抄袭了下~~ 二分+枚举

    有空重写=。=

  • 相关阅读:
    【codevs1515】 跳
    【bzoj1227】 SDOI2009—虔诚的墓主人
    【bzoj3505】 Cqoi2014—数三角形
    【bzoj1059】 ZJOI2007—矩阵游戏
    【poj2122】 Optimal Milking
    【poj2455】 Secret Milking Machine
    【poj3084】 Panic Room
    【poj2699】 The Maximum Number of Strong Kings
    【bzoj3218】 a + b Problem
    【bzoj3122】 Sdoi2013—随机数生成器
  • 原文地址:https://www.cnblogs.com/TO-Asia/p/3191122.html
Copyright © 2011-2022 走看看