思路应该没大问题,可能代码实现错了。
//Author: Velvet on Luogu(uid=443675)
#include <bits/stdc++.h>
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
inline void write(int x){if (x < 0) x = ~x + 1, putchar('-');if (x > 9) write(x / 10);putchar(x % 10 + '0');}
inline void writeln(int x){write(x);putchar('\n');}
inline void writesp(int x){write(x);putchar(' ');}
inline int lowbit(int x) {return x&(-x);}
int a[20],n,m,b[20],c[20],ans;
int check(){
for(int i=1;i<=n;i++)
if(a[i]!=i) return 0;
return 1;
}//答案判断
int f(){
int cnt=0;
for(int i=2;i<=n;i++)
cnt+=(a[i]!=a[i-1]+1);
return (cnt+2)/3;
}//估价函数
void dfs(int dep){
ans|=check();
if(dep+f()>m||ans) return ;
memcpy(c,a,sizeof c);
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
for(int k=j+1,cnt=0;k<=n;k++){//把i~j的放到k的后面
for(int l=1;l<=k;l++) if(l<i||l>j)b[++cnt]=a[l];
for(int l=i;l<=j;l++) b[++cnt]=a[l];
for(int l=k+1;l<=n;l++) b[++cnt]=a[l];
memcpy(a,b,sizeof a);
dfs(dep+1);
memcpy(a,c,sizeof a);
}
}
}
}
int main(){
int T;cin>>T;
while(T--){
n=read(),ans=0;
for(int i=1;i<=n;i++)
cin>>a[i];
for(m=0;m<=4;m++){
dfs(1);
if(ans){
writeln(m);break;
}
}
if(!ans) printf("5 or more\n");
}
return 0;
}