Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34105 baka24 【S】T2 C++ 解答错误 10 266 MS 1380 KB 2783 2024-11-03 15:01:31

Tests(2/20):


#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=2000010; int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} int n,m,a[MAXN],p[MAXN],cnt,a1[MAXN],a2[MAXN],a3[MAXN]; void add(int x,int y,int z){a1[++cnt]=x,a2[cnt]=y,a3[cnt]=z;} void swp(int x,int y){ if(x>y)swap(x,y); add(1,x,y); swap(a[x],a[y]); swap(p[a[x]],p[a[y]]); } void ins(int x,int y,int z){ add(x,y,z); if(a[x]<a[z]){ swap(a[y],a[z]); swap(p[a[y]],p[a[z]]); } else{ swap(a[y],a[x]); swap(p[a[y]],p[a[x]]); } } bool to1(){ for(int i=p[1]+1;i<=n;i++){ if(a[i]<a[1]){ ins(1,p[1],i); return 1; } } if(a[1]>=3){ for(int i=2;i<p[1];i++){ if(a[i]<a[1]){ ins(1,i,n); break; } } for(int i=p[1]+1;i<=n;i++){ if(a[i]<a[1]){ ins(1,p[1],i); return 1; } } } if(a[1]==2&&a[2]==1){ for(int i=3;i<n;i++)if(a[i]>a[i+1]){ ins(1,2,i); ins(1,2,i); ins(1,i,i+1); return 1; } if(m==4)return 0; ins(2,3,4); ins(1,2,3); ins(1,2,3); ins(1,3,4); ins(1,3,4); return 1; } else{ if(p[n]!=2)ins(1,2,p[n]); int tmp=p[1]; ins(1,2,p[1]); ins(1,tmp,n); } return 1; } void slv(){ n=read(),m=read();cnt=0; for(int i=1;i<=n;i++)a[i]=read(),p[a[i]]=i; if(a[n]==1){printf("-1\n");return;} if(n==1){ printf("0\n"); return; } if(n==2){ if(a[1]<a[2])printf("0\n"); else printf("-1\n"); return; } if(n==3){ if(a[1]==1){ if(a[2]==2)printf("0\n"); else { printf("1\n"); printf("1 2 3\n"); } } else{ if(a[1]==2)printf("-1\n"); else{ printf("2\n"); printf("1 2 3\n"); printf("1 2 3\n"); } } return; } if(a[1]!=1){ if(!to1()){ printf("-1\n"); return; } } // for(int i=1;i<=n;i++)cout<<a[i]<<" ";cout<<endl; for(int it=1;it<=n;it++)if(a[it]!=it){ swp(it,p[it]); } printf("%lld\n",cnt); for(int i=1;i<=cnt;i++){ printf("%lld %lld %lld\n",a1[i],a2[i],a3[i]); } } signed main(){ int _=read();while(_--) slv(); return 0; }


测评信息: