Submission #1315383

#TimeUsernameProblemLanguageResultExecution timeMemory
1315383ghammazhassanCat (info1cup19_cat)C++20
25 / 100
430 ms19608 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; 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 in[i]>n/2){ l.insert(i); c++; } } 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; if (a[i]!=n-i+1){ l.erase(i); p.push_back({i,in[i]}); int x=in[i]; if (a[i]>n/2){ l.erase(n-a[i]+1); } else{ l.insert(a[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=in[*l.begin()]; l.erase(a[x]); int y=in[*l.begin()]; l.erase(a[y]); 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...