zoukankan      html  css  js  c++  java
  • E. Minimizing Difference

    E. Minimizing Difference

    【思路】:其实不难发现这个题目,问的是max与min的差值,给了k次操作,我们可以这样考虑一旦一个数变成了下一个数,那么你每次花费的操作就会增加,所以我们只要考虑把最小值变大或者最大值变小,看哪个花费更小,就选择变化哪个,如果一次变化1的话,那么肯定是超时的,所以我们可以考虑一次直接变化到上一个或者下一个,因为个数为1e5,所以我们尺取一下,复杂度为O(n)
    

    原题链接

    附上代码

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 1e5 + 5;
    map<int, int>M;
    typedef long long LL;
    vector<LL>vec;
    int main(){
        LL n, m;
        ios::sync_with_stdio(false);
        cin >> n >> m;
        for(int i = 0; i < n; i ++){
            LL num;
            cin >> num;
            M[num] ++;
            vec.push_back(num);
        }
        sort(vec.begin(), vec.end());
        vec.erase(unique(vec.begin(), vec.end()), vec.end());
        int l = 0, r = vec.size() - 1;
        int mins = vec[0], maxs = vec[vec.size() - 1];
        while(m > 0 && l < r){
            if(M[vec[l]] <= M[vec[r]]){
                LL sum = (vec[l + 1] - vec[l]) * M[vec[l]];
                if(sum <= m){
                    m -= sum;
                    M[vec[l + 1]] += M[vec[l]];
                    l ++;
                    mins = vec[l];
                }
                else{
                    LL x = m / M[vec[l]];
                    m = 0;
                    mins = vec[l] + x;
                }
            }
            else{
                LL sum = (vec[r] - vec[r - 1]) * M[vec[r]];
                if(sum <= m){
                    m -= sum;
                    M[vec[r - 1]] += M[vec[r]];
                    r --;
                    maxs = vec[r];
                }
                else{
                    LL x = m / M[vec[r]];
                    m = 0;
                    maxs = vec[r] - x;
                }
            }
        }
        cout << maxs - mins << endl;
        return 0;
    }
    
  • 相关阅读:
    oracle之三 自动任务调度
    oracle之三资源管理
    oracle之三rman 维护
    oracle之三目录库和辅助库
    oracle之三rman 不完全恢复
    oracle之三rman 备份
    oracle之三rman 完全恢复
    oracle之三RMAN概述
    oracle之三闪回flashback
    Vimium
  • 原文地址:https://www.cnblogs.com/qq136155330/p/11674617.html
Copyright © 2011-2022 走看看