B. Toy Blocks

https://codeforces.com/problemset/problem/1452/B

题意:给定长度为n的数组a,要求任意一个位置i的数字分到其他位置上后(随便分),其他位置的数字都是相等的。问达成这样的要求,总共需要增加多少的数值到数组a中(可以将数值放到任意位置)

思路:对数组a排序,依次考虑所有位置i,当前位置的数字分到其他位置上需要增加多少数字,答案就是所有i中需要数字最多的一个。遍历i时,需要求出其他位置上最后相等的数值maxn是多少,然后用maxn * (n - 1) - sum就是需要的数字的数量。 sum是当前数组的数量。

inline void solve() {
    int n;
    cin >> n;

    vector<int> a(n);
    for (auto& x : a) {
        cin >> x;
    }

    sort(a.begin(), a.end());

    long long sum = std::accumulate(a.begin(), a.end(), 0ll);
    long long ans = 0;
    for (int i = 0; i < n; ++i) {
        long long maxn = a.back();
        if (i == n - 1) {
            maxn = a[i - 1];
        }
        maxn = max<long long>(maxn, (sum + n - 2) / (n - 1));
        ans = max(ans, maxn * (n - 1) - sum);
    }

    cout << ans << '\n';
}
posted @ 2025-11-26 10:50  _Yxc  阅读(5)  评论(0)    收藏  举报