Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34185 | 22fhq | 【S】T2 | C++ | 运行超时 | 10 | 1000 MS | 1192 KB | 2613 | 2024-11-03 17:01:15 |
#include<bits/stdc++.h> using namespace std; inline void read(int &x){ x=0; char c=getchar(); bool f=0; while(!isdigit(c)){if(c=='-')f=1;c=getchar();} while(isdigit(c))x=x*10+c-'0',c=getchar(); if(f)x=-x; } int n,l,p[2000005],q[2000005]; struct op{ int i,j,k; }; vector<op>ans; void add(int x,int y,int z){ if(p[x]>p[z])swap(p[x],p[y]),swap(q[p[x]],q[p[y]]); else swap(p[y],p[z]),swap(q[p[y]],q[p[z]]); ans.push_back({x,y,z}); } void swapsort(){ for(int i=2;i<=n;i++){ if(q[i]==i)continue; add(1,i,q[i]); } } void prt(){ if(ans.size()>l){ cout<<-1<<endl; return; } cout<<ans.size()<<endl; for(auto x:ans)cout<<x.i<<" "<<x.j<<" "<<x.k<<endl; } inline void slv(){ ans.clear(); read(n),read(l); for(int i=1;i<=n;i++)read(p[i]),q[p[i]]=i; if(n==1){ prt(); return; } if(q[1]==n){ cout<<-1<<endl; return; } if(n==2){ prt(); return; } if(q[1]==1){ swapsort(); prt(); return; } if(n==3){ if(p[1]==2) cout<<-1<<endl; else{ add(1,2,3); add(1,2,3); prt(); } return; } for(int i=q[1]+1;i<=n;i++){ if(p[i]<p[1]){ add(1,q[1],i); swapsort(); prt(); return; } } if(p[1]>=3){ for(int i=2;i<q[1];i++){ if(p[i]<p[1]){ add(1,i,n); add(1,q[1],n); swapsort(); prt(); return; } } } if(p[2]==1){ for(int i=3;i<=n;i++){ if(p[i]!=i){ for(int j=3;j<n;j++){ if(p[i]>p[i+1]){ add(1,2,i); add(1,2,i); add(1,i,i+1); swapsort(); prt(); return; } } } } add(1,2,3); add(1,2,3); add(1,2,4); add(1,3,4); add(1,2,4); prt(); return; } if(q[n]!=2){ add(1,2,q[n]); } add(1,2,q[1]); add(1,q[1],n); swapsort(); prt(); return; } int main(){ // freopen("slpjbh.in","r",stdin); // freopen("slpjbh.out","w",stdout); int T; read(T); while(T--)slv(); return 0; }