超倒霉
一直找找找错误,找好久发现函数传数组是引用
经过几个小时的呆滞,几次小奔溃,终于过了样例,然后submit,poj炸了一天了....
测不了了...
代码(待检测)
#include<iostream>
#include<cstring>
using namespace std;
const int N=1100;
int n,step,ans;
int a[N];
int getf(){
int tmp=0;
for(int i=1;i<=n;i++)
if(a[i]!=a[i-1]+1) tmp++;
return (tmp+2)/3;
}
int check(){
for(int i=1;i<=n;i++)
if(a[i]!=i) return 0;
return 1;
}
int dfs(int u){
if(u+getf()>step) return 0;
if(check()) return 1;
int b[n+1];
for(int i=1;i<=n;i++)
b[i]=a[i];
for(int i=1;i<=n-1;i++)
for(int j=i+1;j<=n;j++)
for(int k=j;k<=n;k++){
for(int p=j;p<=k;p++)
a[i+(p-j)]=b[p];
for(int p=i;p<j;p++)
a[p+(k-j)+1]=b[p];
int c[n+1];
for(int ii=1;ii<=n;ii++)
c[ii]=a[ii];
if(dfs(u+1)){
for(int ii=1;ii<=n;ii++)
printf("%d ",c[ii]);
printf("\n");
return 1;
}
for(int ii=1;ii<=n;ii++)
a[ii]=b[ii];
}
return 0;
}
int main(){
int t; cin>>t;
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
step=0;
for(;step<5;step++){
ans=dfs(0);
if(ans) break;
}
if(ans) printf("%d\n",step);
else printf("5 or more\n");
}
return 0;
}