题目描述 新年到啦,为了增添节日的欢乐氛围,小明参加了一个特别的数字游戏。
游戏中有这样一种特殊数列:它的长度为 ( n) ,数列中的元素是 ( 1
小明的任务是要把这个特殊数列调整成从 ( 1
不过呢,在这个充满新年趣味的游戏里,对数列的调整有特定的限制,只能进行以下两种操作:
操作一:就像新年里大家传递礼物一样,把数列的第一个数字移到数列的末尾。
操作二:如同新年里倒转福字寓意福到,将整个数列反转。
现在小明想知道,要把这个特殊数列成功排列成 ( 1
输入描述 多组输入,输入 0 0表示结束。
每组输入第一行输入一个 n,表示数列长度。
第二行输入 n个数字,表示数列。
输出描述 输出达到升序的最少的操作次数。
输入样例 3 1 3 2 0 输出样例 2 数据范围 数据保证一定可以在有限次进行两种操作下达到升序。 20%的数据: 2≤n≤100 100%的数据下: 1<n≤10 5
mycode:
#include<bits/stdc++.h>
using namespace std;
int n,x,minn=INT_MAX;
string s,s1;
void dfs(string s,int sum){
if(s==s1){
minn=min(minn,sum);
return;
}
string t=s;
t+=t[0];
t.erase(0,1);
dfs(t,sum+1);
reverse(s.begin(),s.end());
dfs(s,sum+1);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while(cin>>n&&n){
for(int i=1;i<=n;++i){
cin>>x;
s+=(x+'0');
s1+=(i+'0');
}
dfs(s,0);
cout<<minn<<'\n';
}
return 0;
}