Submission #315280

#TimeUsernameProblemLanguageResultExecution timeMemory
315280casperwangCat (info1cup19_cat)C++14
100 / 100
546 ms20200 KiB
#include <bits/stdc++.h> #define int long long #define pb push_back #define pii pair<int,int> #define ff first #define ss second using namespace std; const int MAXN = 3000000; int t, n; int a[MAXN+1]; int c[MAXN+1]; int p[MAXN+1]; bool need[MAXN+1]; int tmp[MAXN+1]; int cnt; vector <pii> ans; void swp(int x, int y) { swap(a[n-x+1], a[n-y+1]); swap(p[a[n-x+1]], p[a[n-y+1]]); swap(a[x], a[y]); swap(p[a[x]], p[a[y]]); } void solve(int N) { for (int i = 1; i <= N; i++) { if (need[i]) { int t = p[i]; while (!need[t] && t != i) t = p[t]; if (t == i) continue; ans.pb(pii(i, n-t+1)); swp(i, t); need[i] = need[t] = 0; } } for (int i = 1; i <= N; i++) { if (a[i] != i) { swap(need[i], need[p[i]]); ans.pb(pii(i, p[i])); swp(i, p[i]); } } cnt = 0; for (int i = 1; i <= N; i++) { if (need[i]) { if (cnt % 2) { ans.pb(pii(i, tmp[0])); ans.pb(pii(i, n-tmp[0]+1)); need[i] = need[n-tmp[0]+1] = 0; } cnt++; tmp[0] = n-i+1; } } } signed main() { ios_base::sync_with_stdio(0), cin.tie(0); cin >> t; while (t--) { cin >> n; bool tf = 1; for (int i = 1; i <= n; i++) { cin >> a[i]; p[a[i]] = i; need[i] = 0; c[i] = tmp[i] = 0; } ans.clear(); cnt = 0; for (int i = 1; i <= n/2 && tf; i++) { if (abs(a[n-i+1] + a[i]) != n+1) tf = 0; if (a[i] > n/2) { swap(a[n-i+1], a[i]); swap(p[a[i]], p[a[n-i+1]]); need[i] = 1; cnt++; } } if (cnt % 2) tf = 0; if (!tf) { cout << -1 << "\n"; } else { solve(n/2); cout << ans.size() << " " << ans.size() << "\n"; for (pii o : ans) cout << o.ff << " " << o.ss << "\n"; } } }
#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...