题目链接
题目保证了给定输出一定有解,所以序列一定是从1—n 按操作1变换来的或者说从n—1按操作1变换来的,然后计算一下还原步数就可以。
signed main()
{
int n;
read(n);
int a[n+5],pos[n+5];
for(int i=1;i<=n;i++){
read(a[i]);
pos[a[i]]=i;
}
int ans;
if(pos[1]<pos[n]){
if(pos[1]+1==pos[n]){
ans=min(pos[1]+1,n-pos[1]+1);
}
else ans=0;
}
else{
if(pos[1]-1==pos[n]){
ans=min(pos[n],n-pos[n]+2);
}
else ans=1;
}
printf("%lld\n",ans);
}