Codeforces Round #623 (Div. 2) C. Restoring Permutation(二分)

题目链接:https://codeforces.com/contest/1315/problem/C

#include <bits/stdc++.h>
using namespace std;

const int M = 220;
int n, a[M], num[M];

void solve() {
    cin >> n;
    set<int> st (num + 1, num + 1 + 2 * n);
    for (int i = 1; i <= 2 * n; i += 2) {
        cin >> a[i];
        st.erase(a[i]);
    }
    for (int i = 2; i <= 2 * n; i += 2) {
        auto it = st.upper_bound(a[i - 1]);
        if (it == st.end()) {
            cout << "-1" << "\n";
            return;
        }
        a[i] = *it;
        st.erase(it);
    }
    for (int i = 1; i <= 2 * n; i++) {
        cout << a[i] << " \n"[i == 2 * n];
    }
}

int main() {
    for (int i = 0; i < M; i++) num[i] = i;
    int t; cin >> t;
    while (t--) solve();
}

 

posted @ 2020-04-12 13:12  Kanoon  阅读(115)  评论(0)    收藏  举报