其他分享
首页 > 其他分享> > CF254A Cards with Numbers 题解

CF254A Cards with Numbers 题解

作者:互联网

Content

有 \(2n\) 个数,让你找出两两相等的 \(n\) 对数的编号,或者方案不存在。

数据范围:\(1\leqslant n\leqslant 3\times 10^5,1\leqslant a_i\leqslant 5000\)。

Solution

这题目还是挺好做的。

首先边读入边记录,如果一个数出现在前或者从未出现过,记录下来,并找后面有没有相等的数,有的话记录答案并将所有的记录清除(就相当于你找到了相等的一对数,在开始继续找时就会被认为没有出现过),如果不是恰好 \(n\) 对的话那么方案不存在,否则直接输出方案就好了。

Code

#include <cstdio>
using namespace std;

int n, cnt, a[600007], vis[5007], ans[300007][2];

int main() {
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout); 
	scanf("%d", &n);
	for(int i = 1; i <= 2 * n; ++i) {
		scanf("%d", &a[i]);
		if(vis[a[i]]) {
			ans[++cnt][0] = vis[a[i]];
			ans[cnt][1] = i;
			vis[a[i]] = 0;
		} else	vis[a[i]] = i;
	}
	if(cnt != n)	return printf("-1"), 0;
	for(int i = 1; i <= n; ++i)
		printf("%d %d\n", ans[i][0], ans[i][1]);
}

标签:CF254A,记录,int,题解,相等,freopen,Cards,txt,leqslant
来源: https://www.cnblogs.com/Eason-AC/p/15717120.html