CF1043A Elections 题解
Content
有两个人参加选举,其中已知 \(n\) 位选民投给第二个人的票数为 \(a_1,a_2,a_3,...,a_n\)。第一个人很想赢,所以想通过调整每位选民只能投的票数 \(k\) 来让自己得票数比第二个人多,试求出最小的 \(k\)。
数据范围:\(1\leqslant n,a_i\leqslant 100,k\geqslant \max\{a_i\}\)。
Solution
你们怎么都用的是直接枚举啊qwq,那我来一个偏数学的题解吧。
设选民给第二个人投的总票数为 \(s\),我们可以列出这样的不等式:\(nk-s>s\)。解得 \(k>\dfrac{2s}{n}\),所以我们的答案就是 \(\max\{\dfrac{2s}{n}+1,\max\{a_i\}\}\)。
Code
int n, a[107], sum, maxi, ans;
int main() {
getint(n);
_for(i, 1, n) {
getint(a[i]);
sum += a[i];
maxi = max(maxi, a[i]);
}
ans = max(sum * 2 / n + 1, maxi);
writeint(ans);
return 0;
}

浙公网安备 33010602011771号