• hihoCoder 1362 修补木桶


    描述

    一只木桶能盛多少水,并不取决于桶壁上最高的那块木板,而恰恰取决于桶壁上最短的那块。

    已知一个木桶的桶壁由N块木板组成,第i块木板的长度为Ai。

    现在小Hi有一个快捷修补工具,每次可以使用修补工具将连续的不超过L块木板提高至任意高度。

    已知修补工具一共可以使用M次(M*L<N),如何修补才能使最短的那块木板最高呢?

    注意:

    木板是环形排列的,第N-1块、第N块和第1块也被视为连续的。

    输入

    第1行:3个正整数,N, M, L。分别表示木板数量,修补工具使用次数,修补工具每次可以同时修补的木板数。 1≤N≤1,0001≤L≤20M*L<N

    第2行:N个正整数,依次表示每一块木板的高度Ai,1≤Ai≤100,000,000

    输出

    第1行:1个整数。表示使用修补工具后,最短木块的所能达到的最高高度

    样例说明

    第一个修补工具覆盖[2 3 4]

    第二个修补工具覆盖[5 8 1]

    样例输入

    8 2 3
    8 1 9 2 3 4 7 5
    

    样例输出

    7
    
    • 二分查找最长木板;二分的上界为所有木板中的最长木板,下界为所有木板中的最断木板。(题意表明M * L < N)。
    • 然后检查修补次数是否小于要求的修补次数;枚举修补的起点;
    #include<bits/stdc++.h>
    using namespace std;
    
    int n, m, l;
    bool chick(int mid, vector<int> &vec)
    {
        for(int i=0; i<n; ++ i)
        {
            int res = 0;
            for(int j=i; j<i+n; ++ j)
            {
                if(res > m)
                    break;
                if(vec[j] < mid)
                {
                    j += l-1;
                    res ++;
                }
            }
            if(res <= m)
                return true;
        }
        return false;
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
    
        cin >> n >> m >> l;
        vector<int> vec(2*n);
    
        int mx = INT_MIN, mn = INT_MAX;
        for(int i=0; i<n; ++ i)
        {
            cin >> vec[i];
            vec[i+n] = vec[i];
            mx = max(vec[i], mx);
            mn = min(vec[i], mn);
        }
        while(mn < mx)
        {
            int mid = mn + ((mx - mn + 1)>>1);
            if(chick(mid, vec))
                mn = mid;
            else
                mx = mid-1;
        }
        cout << mn << endl;
        return 0;
    }
    
    
    
  • 相关阅读:
    Linux的安装(虚拟机环境)与基础配置
    爬虫之proxy(代理)
    爬虫之UserAgent
    爬虫之urllib.error模块
    【React自制全家桶】五、React组件的生命周期函数详解
    【React自制全家桶】四、React中state与props的分析与比较
    【React自制全家桶】三、React使用ref操作DOM与setState遇到的问题
    【React自制全家桶】二、分析React的虚拟DOM和Diff算法
    小程序API:wx.showActionSheet 将 itemList动态赋值
    解决json_encode中文乱码问题
  • 原文地址:https://www.cnblogs.com/aiterator/p/6673631.html
Copyright © 2020-2023  润新知