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;
}
posted @ 2021-12-21 19:49  Eason_AC  阅读(27)  评论(0)    收藏  举报