Submission #1315412

#TimeUsernameProblemLanguageResultExecution timeMemory
1315412ghammazhassanCat (info1cup19_cat)C++20
25 / 100
295 ms15036 KiB
// #include <bits/stdc++.h>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <map>
#include <unordered_map>
#include <vector>
#include <iomanip>
#include <string>
#include <queue>
#include <set>
#include <deque>
using namespace std;
#define int long long
#define endl "\n"
#define fi first
#define se second
const int M=1e9+7;
const int inf = 1e9;
const int LOG=17;
const int N=2e5+5;
int n , m , c , w , k , t=1 , q=1 , x , y , z , l , r;
void solve(){
    cin >> n;
    vector<int>a(n+1);
    for (int i=1;i<=n;i++){
        cin >> a[i];
    }
    vector<int>in(n+1);
    for (int i=1;i<=n;i++){
        in[a[i]]=i;
    }
    c=0;
    set<int>l;
    set<int>op;
    set<int>s;
    for (int i=1;i<=n;i++){
        if (a[i]+a[n-i+1]!=n+1){
            cout << -1 << endl;
            return;
        }
        if (i<=n/2 and a[i]==n-i+1){
            l.insert(n-i+1);
        }
        if (i<=n/2 and in[i]>n/2){
            c++;
            s.insert(i);
        }
    }
    if (c%2){
        cout << -1 << endl;
        return;
    }
    vector<pair<int,int>>p;
    for (int i=1;i<=n/2;i++){
        if (a[i]==i)continue;
        s.erase(i);
        if (a[i]!=n-i+1){
            p.push_back({i,in[i]});
            int x=in[i];
            swap(a[i],a[x]);
            swap(a[n-i+1],a[n-x+1]);
            in[a[i]]=i;
            in[a[x]]=x;
            in[a[n-i+1]]=n-i+1;
            in[a[n-x+1]]=n-x+1;
        }
        else{
            int x;
            x=i;
            l.erase(a[x]);
            
            int y;
            if (l.size()){
                y=in[*l.begin()];
                l.erase(a[y]);
            }
            else{
                y=*s.begin();
            }
            p.push_back({x,n-y+1});
            swap(a[x],a[n-y+1]);
            swap(a[n-x+1],a[y]);
            in[a[x]]=x;
            in[a[y]]=y;
            in[a[n-x+1]]=n-x+1;
            in[a[n-y+1]]=n-y+1;

            if (a[i]==i)continue;
            p.push_back({i,in[i]});
            x=in[i];
            swap(a[i],a[x]);
            swap(a[n-i+1],a[n-x+1]);
            in[a[i]]=i;
            in[a[x]]=x;
            in[a[n-i+1]]=n-i+1;
            in[a[n-x+1]]=n-x+1;
        }
    }
    cout << p.size() << " " << p.size() << endl;
    for (auto [x,y]:p){
        cout << x << " " << y << endl;
    }

}
signed main()    
{   
    // #ifndef ONLINE_JUDGE
    // freopen("input.txt","r" ,stdin);
    // freopen("output.txt","w",stdout);
    // #endif
    ios::sync_with_stdio(0);//DO NOT USE IN INTERACTIVE
    cin.tie(0), cout.tie(0);//DO NOT USE IN INTERACTIVE
    cout << fixed << setprecision(9);
    srand(time(0));
    // int t=1;
    cin >> t;
    for (int _=1;_<=t;_++){
        solve();
        q++;
    }
}
#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...