zoukankan      html  css  js  c++  java
  • HUTXXXX 周正虎的难题 二分

    这题直接二分就可以了,注意下二分的返回值,以后都最好手动模拟一下。

    代码如下:

    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    typedef long long int Int64;
    
    Int64 N, M, seq[1000005];
    
    Int64 sum(Int64 h)
    {
        Int64 ret = 0;
        for (int i = 1; i <= N; ++i) {
            if (seq[i] > h) {
                ret += (seq[i] - h);
            }
        }
        return ret;
    }
    
    Int64 bsearch(Int64 l, Int64 r)
    {
        Int64 mid, tot;
        while (l <= r) {
            mid = (l + r) >> 1;
            tot = sum(mid); 
            if (tot > M) {
                l = mid + 1;
            }
            else if (tot < M) {
                r = mid - 1;
            }
            else return mid;
        }
        return r;
    }
    
    int main()
    { 
        Int64 Max;
        while (scanf("%I64d %I64d", &N, &M) == 2) {
            Max = -1;
            for (int i = 1; i <= N; ++i) {
                scanf("%I64d", &seq[i]);
                Max = max(Max, seq[i]);
            }
            printf("%I64d\n", bsearch(0, Max));
        }
        return 0;
    }
  • 相关阅读:
    浅谈数组
    前端冷知识
    number框
    jQuery封装轮播图插件
    瀑布流的简单制作
    Java script-数组与字符串方法
    Java script-1
    Web前端基础学习-2
    Web前端基础学习-3
    Web前端基础学习-1
  • 原文地址:https://www.cnblogs.com/Lyush/p/2605810.html
Copyright © 2011-2022 走看看