提交时间:2024-11-03 12:37:29
运行 ID: 34035
#include<bits/stdc++.h> using namespace std; long long T,n,l,a[15],flag; struct ph{ long long i,j,k; }ji[10005]; void p(long long top,ph ji[]){ printf("%lld\n",top); for(int i=1;i<=top;i++){ printf("%lld %lld %lld\n",ji[i].i,ji[i].j,ji[i].k); } } void dfs(long long a[],long long top,ph ji[]){ if(flag==1 || top>l)return; if(a[1]==1 && a[2]==2 && a[3]==3 && a[4]==4 && top<=2){ flag=1; p(top,ji); return; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ for(int k=j+1;k<=n;k++){ if(a[i]>a[k]){ swap(a[i],a[j]); ji[top+1]=((ph){i,j,k}); dfs(a,top+1,ji); swap(a[i],a[j]); } else{ swap(a[j],a[k]); ji[top+1]=((ph){i,j,k}); dfs(a,top+1,ji); swap(a[j],a[k]); } } } } } int main(){ // freopen("sort.in","r",stdin); // freopen("sort.out","w",stdout); scanf("%lld",&T); while(T--){ scanf("%lld%lld",&n,&l); if(n>4)break; for(int i=1;i<=n;i++){ scanf("%lld",&a[i]); } if(n==4){ flag=0; dfs(a,0,ji); if(flag==0){ printf("-1\n"); } } if(n==3){ long long n1=a[1],n2=a[2],n3=a[3]; long long top=0; if(n1==1 && n2==2 && n3==3){ printf("0\n"); continue; } for(int i=1;i<=l;i++){ if(n1==1 && n2==2 && n3==3){ p(top,ji); flag=1; break; } if(a[1]>a[3]){ swap(a[1],a[2]); } else{ swap(a[2],a[3]); } ji[++top]=((ph){1,2,3}); } if(flag==0)printf("-1\n"); } if(n==2){ if(a[1]==1 && a[2]==2){ printf("0\n"); } else{ printf("-1\n"); } } if(n==1){ if(a[1]==1){ printf("0\n"); } else printf("-1\n"); } } return 0; }