1. 程式人生 > 其它 >CF254A Cards with Numbers 題解

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]);
}