CF1092B Teams Forming 题解

Content

\(n\) 个学生,每个学生有一个能力值 \(a_i\)。现在想把学生两两分成一组,但是不能让每个组里面的学生能力值不相同,因此可以通过刷题来提升自己的能力值,每次解出一道题,能力值加 \(1\),求问这些学生总共应该刷多少道题目才能够全部都能两两分成一组?

数据范围:\(2\leqslant n\leqslant 100,1\leqslant a_i\leqslant 100\),保证 \(n\) 是偶数。

Solution

我们直接从小到大排序,这样可以保证两两一组之间的差是最小的,所以每两个组一组,然后求出他们之间的差值,就可以保证能力值相差最小,即需要解出的题目数量最小。

Code

int n, a[107], ans;

int main() {
	getint(n);
	_for(i, 1, n)	getint(a[i]);
	sort(a + 1, a + n + 1);
	_spfor(i, 1, n, 2)
		ans += (a[i + 1] - a[i]);
	writeint(ans);
	return 0;
}
posted @ 2021-12-17 14:39  Eason_AC  阅读(39)  评论(2)    收藏  举报