• 洛谷 P2678 跳石头


    题目传送门

    解题思路:

    人生中第一道二分答案的题,小车问题那道不算.

    二分枚举一个答案,验证,如果小于当前枚举答案值,就需要去掉石头,看最后如果比m大,说明答案大了,否则就是小了或正好,知道答案区间l和r长度小于0时,就是答案.

    AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 
     4 using namespace std;
     5 
     6 int q,n,m,a[50001],mid,ans;
     7 
     8 inline bool ch(int len) {
     9     int sum = 0,now = 0;
    10     for(int i = 1;i <= n; i++) 
    11         if(a[i] - a[now] < len)
    12             sum++;
    13         else
    14             now = i;
    15     if(sum > m)
    16         return false;
    17     return true;
    18 }
    19 
    20 int main() {
    21     scanf("%d%d%d",&q,&n,&m);
    22     a[0] = 0;a[n+1] = q;
    23     for(int i = 1;i <= n; i++)
    24         scanf("%d",&a[i]);
    25     int l = 1,r = q;
    26     while(l <= r) {
    27         mid = (l + r) / 2;
    28         if(ch(mid))
    29             l = mid + 1;
    30         else if(!ch(mid)) 
    31             r = mid - 1;
    32     }
    33     printf("%d",r);
    34     return 0;
    35 }

    //NOIP提高2015 Day2 T1

  • 相关阅读:
    codeforce1028A Find Square
    2018ccpc网络赛 Buy and Resell
    差分约束
    Lost Cows
    动态查询区间第k大
    疫情控制
    天天爱跑步
    次小生成树
    树上差分闇の連锁
    Stars in Your Window
  • 原文地址:https://www.cnblogs.com/lipeiyi520/p/11749609.html
Copyright © 2020-2023  润新知