其他分享
首页 > 其他分享> > CF701A Cards 题解

CF701A Cards 题解

作者:互联网

Content

有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试在其中找到 \(\dfrac{n}{2}\) 对数,使得每个数对的元素的和都相等。

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

Solution

我们先算出这些数的总和 \(s\),然后每个数对的和就是 \(\dfrac{s}{\dfrac{n}{2}}=\dfrac{2s}{n}\),又由于本题的数据范围实在太小,所以我们直接 \(\mathcal{O}(n^2)\) 枚举看是否有一对数的和等于 \(\dfrac{2s}{n}\) 即可。记得用 \(vis\) 数组以免重复取到了同样的元素。

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
using namespace std;

int n, s, a[107], vis[107];

int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i) 
		s += scanf("%d", &a[i]);
	for(int i = 1; i <= n; ++i) {
		if(!vis[i])
			for(int j = i + 1; j <= n; ++j)
				if(a[i] + a[j] == s * 2 / n && !vis[j]) {
					printf("%d %d\n", i, j);
					vis[i] = vis[j] = 1;
					break;
				}
	}
	return 0;
}

标签:CF701A,int,题解,数对,vis,dfrac,Cards,include,leqslant
来源: https://www.cnblogs.com/Eason-AC/p/15698304.html