Submission #777232

#TimeUsernameProblemLanguageResultExecution timeMemory
777232HD1Cat (info1cup19_cat)C++14
61 / 100
337 ms17344 KiB
//we are all lost trying to be someone. #include <bits/stdc++.h> #define fastio ios_base::sync_with_stdio(0); cin.tie(0); #define sz(x) ll(x.size()) #define reve(x) reverse(x.begin(),x.end()) #define ff first #define ss second #define pb push_back using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll,ll> ii; typedef pair<ll, ii >tri; const ll MAX=1e7+100; const ll mod=1e9+7; const ll inf=1e9; ll A[MAX], pos[MAX]; vector<ii> ans; ll n; bool sepuede(){ ll sum=n+1; for(ll i=1; i<=n/2; i++){ if(A[i]+A[sum-i]!=sum) return false; } ll cont=0; for(ll i=1; i<=n/2; i++){ if(A[i]>n/2)cont++; } if(cont%2==1) return false; return true; } void solve(){ cin>>n; for(ll i=1; i<=n; i++){ cin>>A[i]; } if(!sepuede()){ cout<<-1<<'\n'; return; } for(ll i=1; i<=n/2; i++){ if(A[i]>n/2){ if(A[A[i]]<=n/2 and n-i+1!=A[i]){ ans.push_back({i,A[i]}); ll aux=A[i]; swap(A[i],A[A[i]]); swap(A[n-i+1],A[n-aux+1]); } } } for(ll i=n; i>n/2; i--){ if(A[i]<=n/2){ if(A[A[i]]>n/2 and n-i+1!=A[i]){ ans.push_back({i,A[i]}); ll aux=A[i]; swap(A[i],A[A[i]]); swap(A[n-i+1],A[n-aux+1]); } } } ll j=(n/2); for(ll i=1; i<=n/2; i++){ if(A[i]>n/2){ while(j+1<=n and A[j+1]>n/2) j++; j++; ans.push_back({j,i}); swap(A[i],A[j]); swap(A[n-i+1],A[n-j+1]); } } for(ll i=1; i<=n/2; i++){ pos[A[i]]=i; } ll cont=0; for(ll i=1; i<=n/2; i++){ if(A[i]!=i){ ll a=pos[i]; ll b=A[i]; ans.pb({a,i}); swap(A[pos[i]],A[i]); pos[i]=i; pos[b]=a; cont++; } } /* for(ll i=1; i<=n/2; i++){ cout<<A[i]<<" "; } cout<<'\n';*/ cout<<sz(ans)<<" "<<sz(ans)<<'\n'; for(ii x:ans){ cout<<x.ff<<" "<<x.ss<<'\n'; } ans.clear(); return; } int main(){ fastio; ll t; cin>>t; while(t--){ solve(); } return 0; }
#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...