CF254A Cards with Numbers 題解
阿新 • • 發佈:2021-12-21
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]); }