Submission #1174615

#TimeUsernameProblemLanguageResultExecution timeMemory
1174615browntoadDEL13 (info1cup18_del13)C++20
15 / 100
4 ms1472 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
// #define int ll
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define REP(i, n) FOR(i, 0, n)
#define REP1(i, n) FOR(i, 1, n+1)
#define RREP(i, n) for (int i = (n)-1; i >= 0; i--)
#define pii pair<int, int>
#define pip pair<int, pii>
#define f first
#define s second
#define pb push_back
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) (int)((x).size())
#define endl '\n'

#ifdef TOAD
#define IOS() ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#else
#define IOS() ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#endif // TOAD

const ll maxn = 1e3+5;
const int iinf = 1e9+5;

signed main(){
    IOS();
    int t; cin>>t;
    while(t--){
        int n, q; cin>>n>>q;
        vector<bool> toad(n+1);
        vector<int> rem(q), del;
        REP(i, q){
            cin>>rem[i];
            toad[rem[i]] = 1;
        }

        int lick = -1;
        REP1(i, n){
            if (i > 0 && i < n && !toad[i-1] && toad[i] && !toad[i+1]){
                lick = i;
            }
        }

        REP1(i, n){
            if (!toad[i]) del.pb(i);
        }

        vector<vector<int>> nip;
        int pre = -3;
        for (auto x:del){
            if (x-pre > 2){
                vector<int> poo; poo.pb(x);
                nip.pb(poo);
            }
            else nip.back().pb(x);

            pre = x;
        }

        bool gg = false;
        vector<int> ians;
        for (auto vv:nip){
            if (SZ(vv)&1) gg = 1;
            bool ex = 0;
            REP(i, SZ(vv)-1) if (vv[i+1] > vv[i]+1) ex = 1;
            if (!ex) gg = 1;

            int cnt = 0;
            vector<int> oo;
            REP(i, SZ(vv)){
                cnt++;
                if (i == SZ(vv)-1 || vv[i+1] != vv[i]+1){
                    oo.pb(cnt);
                    cnt = 0;
                }
            }
            if (gg) break;

            /*bool fang = 0;
            REP(i, SZ(oo)-1){
                if (oo[i] < 0){
                    gg = 1;
                    break;
                }
                if (oo[i] == 0) {
                    fang = 0;
                    continue;
                }

                if (oo[i]&1){
                    oo[i+1]--;
                    fang = 1;
                }
                else {
                    oo[i+1] -= 2;
                    if (oo[i+1] == -1){
                        if (fang){
                            oo[i+1] += 2;
                            fang = 0;
                        }
                        else{
                            gg = 1;
                            break;
                        }
                    }
                    else fang = 1;
                }
            }
            if (oo.back() < 0 || (oo.back() > 0 && !fang)){
                gg = 1;
                break;
            }*/


            if (oo[0] <= oo[1]){
                int penis = (oo[1] - oo[0])/2;
                for (int i = penis; i >= 1; i--){
                    ians.pb(lick + 2*i);
                }
                REP(i, oo[0]) ians.pb(lick);
            }
            else{
                int penis = (oo[0] - oo[1])/2;
                for (int i = penis; i >= 1; i--){
                    ians.pb(lick - 2*i);
                }
                REP(i, oo[1]) ians.pb(lick);
            }

        }
        if (gg){
            cout<<-1<<endl;
        }
        else{
            cout<<SZ(ians)<<endl;
            for (auto x:ians) cout<<x<<' ';
            cout<<endl;
        }
        //cout<<(gg?-1:0)<<endl;
    }
}
/*
2 3
2 4 3
5 7 5
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...