这题还是没有很明白,总共有k次操作,最优操作是最大加到最小值,那么前面k-n+1始终保持其值最大,就是尽量使最大值+i-i-1,那么就可以得到每两次对应操作可以得到最大值-1,但是如果有k次操作,那么就应该使得最大值到最小值一起-1,那么就得到最后的依次+k~+k-n+1。如果k-n是奇数,那么最后一次+操作时候会有一个变成-,那么会影响最终答案,解决方案就是只对1到n-1进行操作。
(还不是很懂,孩子自己写的玩的。
#include "bits/stdc++.h"
using namespace std;
long long n,a[10010],t,q;
int main() {
cin >> n >> q;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + 1 + n);
while (q--) {
long long k, minn = 1e18;
long long sum = 0;
cin >> k;
for (int i = 1; i <= n; i++) {
if (!k) {
minn = min(minn, a[i]);
continue;
}
if (i == n) {
if (k & 1) {
sum += a[i] + k;
minn = min(a[i] + k, minn);
k--;
sum -= k / 2;
minn = min(minn, sum / n);
} else {
sum += a[i];
sum -= k / 2;
minn = min(minn, a[i]);
minn = min(minn, sum / n);
}
} else {
minn = min(minn, a[i] + k);
sum += a[i] + k;
}
if (k != 0) {
k--;
}
}
cout << minn << " ";
}
return 0;
}