Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34073 LYLAKIOIAKIOI 【S】T2 C++ 解答错误 5 263 MS 848 KB 3256 2024-11-03 14:27:21

Tests(1/20):


#include<bits/stdc++.h> #define pii pair<int,int> #define mk make_pair #define fi first #define se second using namespace std; const int N=2e6+10; int n; int p[N];int L; bool ok=0; bool chk(){ for(int i=1;i<=n;i++) if(p[i]!=i) return 0;return 1; }int op[N][3]; int t[N]; int opt=0; void add(int x,int y,int z){ ++opt;op[opt][0]=x,op[opt][1]=y,op[opt][2]=z; if(p[x]>p[z]) swap(p[x],p[y]); else swap(p[y],p[z]); } void m1(){ int ps=0;for(int i=1;i<=n;i++) if(p[i]==1) ps=i; pii mn=mk(0x3f3f3f3f,0); for(int i=ps+1;i<=n;i++) mn=min(mn,mk(p[i],i)); if(p[1]>mn.fi){ add(1,ps,mn.se); }else{ pii mx=mk(0,0); for(int i=1;i<=ps-1;i++) mx=max(mx,mk(p[i],i)); if(mx.fi<mn.fi){ if(p[1]==2&&p[2]==1) add(1,2,n-1); else if(p[1]==2){ int pos=0; for(int i=1;i<=ps-1;i++) if(p[i]==ps) pos=i; add(1,pos,ps); } for(int i=1;i<=ps-1;i++){ if(p[i]<p[1]){ add(1,i,n);break; } } }else{ bool fla=0;int pos=0; for(int i=1;i<=ps-1;i++) if(p[i]==ps) fla=1,pos=i; if(fla){ add(1,pos,ps); }else{ for(int i=1;i<=n;i++){ t[i]=0; }for(int i=ps+1;i<=n;i++) t[p[i]]=i; for(int i=1;i<=ps-1;i++){ if(fla) break; if(p[i]<p[1]&&t[i]!=0){ fla=1; add(1,i,t[i]); } }if(!fla) add(1,mx.se,ps); } }for(int i=ps+1;i<=n;i++){ if(p[i]<p[1]){ add(1,ps,i);break; } } } } bool work(){//n-2 opt=0; if(p[n]==1) return 0; int mn=n+1,mx=0; if(p[1]!=1) m1(); for(int i=1;i<=n;i++) t[i]=0; for(int i=1;i<=n;i++) t[p[i]]=i; for(int i=2;i<=n;i++){ if(t[i]==i) continue; swap(t[p[i]],t[i]); add(1,i,t[p[i]]); } if(opt>L) return 0; if(!chk()) return 0; return 1; }bool work3(){ opt=0; if(chk()) return 1; for(int i=1;i<=L;i++){ add(1,2,3); if(chk()) return 1; }return 0; } void slv(){ cin>>n>>L; for(int i=1;i<=n;i++) cin>>p[i]; if(n<=3){ if(n==3){ if(work3()){ cout<<opt<<'\n'; for(int i=1;i<=opt;i++){ for(int j=0;j<=2;j++) cout<<op[i][j]<<' '; cout<<'\n'; } }else{ cout<<-1<<'\n'; } }else{ opt=0; if(chk()) cout<<0<<'\n'; else cout<<-1<<'\n'; } return ; } if(work()){ cout<<opt<<'\n'; for(int i=1;i<=opt;i++){ for(int j=0;j<=2;j++) cout<<op[i][j]<<' '; cout<<'\n'; } }else{ cout<<-1<<'\n'; } } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t;cin>>t;while(t--) slv(); cout.flush();cout.flush(); }


测评信息: