提交时间:2024-11-04 10:40:09
运行 ID: 34256
#include<bits/stdc++.h> using namespace std; const int N=2e6+10; int T,n,L,a[N],c[N]; struct Step{int i,j,k;}s[N];int CNT; void swap(int &x,int &y){int c=x;x=y;y=c;} void slv(){ // for(int i=1;i<=n;i++)cout<<a[i]<<" "; // cout<<endl; for(int i=2;i<=n;i++){ if(c[i]==i)continue; int now=c[i-1]+1; s[++CNT]={1,now,c[i]}; c[a[now]]=c[i]; swap(a[now],a[c[i]]);c[i]=now; } printf("%d\n",CNT); for(int p=1;p<=CNT;p++){printf("%d %d %d\n",s[p].i,s[p].j,s[p].k);} } inline void init(){ CNT=0; } int main(){ scanf("%d",&T); while(T--){ init(); scanf("%d%d",&n,&L); for(int i=1;i<=n;i++){ scanf("%d",&a[i]);c[a[i]]=i; } if(n<=2){ if(n==1)cout<<0<<endl; if(n==2&&a[1]==1&&a[2]==2)cout<<0<<endl; if(n==2&&a[1]==2&&a[2]==1)cout<<-1<<endl; continue; } if(n==3){ // cout<<1<<endl; while((a[1]!=1||a[2]!=2||a[3]!=3)&&CNT<L){ // cout<<CNT<<endl; s[++CNT]={1,2,3}; if(a[1]>a[3]){c[a[2]]=1;c[a[1]]=2;swap(a[1],a[2]);} else{c[a[3]]=2;c[a[2]]=3;swap(a[2],a[3]);} } if(a[1]==1&&a[2]==2&&a[3]==3){ printf("%d\n",CNT); for(int i=1;i<=CNT;i++){printf("1 2 3\n");} } else{printf("-1\n");} continue; } if(a[1]==1){slv();} else{ if(c[1]==n){printf("-1\n");} else{ if(a[1]==2&&a[2]==1){ int pl=0; for(int i=3;i<=n;i++){if(a[i]!=i){pl=i;break;}} if(pl>0){ s[++CNT]={1,2,pl};c[a[pl]]=2;c[1]=pl;swap(a[2],a[pl]); s[++CNT]={1,2,pl};c[a[1]]=2;c[a[2]]=1;swap(a[1],a[2]); int j;for(j=pl+1;j<=n;j++){if(a[j]==pl)break;} s[++CNT]={1,c[1],j};c[a[1]]=c[1];swap(a[1],a[c[1]]);c[1]=1; slv(); } else{ if(n==L&&L==4){printf("-1\n");} else{ printf("5\n"); printf("1 3 4\n"); printf("1 2 3\n"); printf("1 2 3\n"); printf("1 2 3\n"); printf("1 3 4\n"); } } } else{ // cout<<1<<endl; int mx=0,mn=10000000,px,pn; for(int i=1;i<c[1];i++){if(a[i]>mx){mx=a[i];px=i;}} for(int i=c[1]+1;i<=n;i++){if(a[i]<mn){mn=a[i];pn=i;}} if(a[px]>a[pn]){ // cout<<2<<endl; // cout<<px<<" "<<pn<<endl; if(a[1]<a[pn]){ // cout<<3<<endl; s[++CNT]={1,px,c[1]};c[a[1]]=px;c[mx]=1;swap(a[1],a[px]); } s[++CNT]={1,c[1],pn};c[a[1]]=c[1];swap(a[1],a[c[1]]);c[1]=1; slv(); } else{ s[++CNT]={1,c[c[1]],c[1]};swap(a[1],a[c[c[1]]]);c[c[1]]=1;c[a[1]]=c[c[1]]; s[++CNT]={1,2,n};c[a[n]]=2;c[a[2]]=n;swap(a[2],a[n]); s[++CNT]={1,c[1],pn};c[a[1]]=c[1];swap(a[1],a[c[1]]);c[1]=1; slv(); } } } } } return 0; }