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';
}

浙公网安备 33010602011771号