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