E. Minimizing Difference

Posted qq136155330

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

以上是关于E. Minimizing Difference的主要内容,如果未能解决你的问题,请参考以下文章

codeforces 1244E Minimizing Difference (贪心)

10_InfluxDB常用函数变换类函数(DERIVATIVE, DIFFERENCE,ELAPSED,MOVING_AVERAGE,NON_NEGATIVE_DERIVATIVE)等(代

B. Ania and Minimizing 1000 / 贪心

CF1076A Minimizing the String

B. Ania and Minimizing (Codeforces Round #588 (Div. 2) )

Codeforces Round #598 (Div. 3) D - Binary String Minimizing