- 不需要考虑效率的烙饼排序,不难发现我们可以将任意位置的煎饼在不影响下面的情况下翻到最上面,同时可以将最上面的煎饼翻到任意位置;因此可以参考选择排序,每次找一个最大的先翻到最上面,然后再将其翻到正确的位置。
#include<iostream>
#include<algorithm>
using namespace std;
int a[35],x,cnt,b[35],ans[35],num,tmp,d[35];
char c;
void solve()
{
for(int i=1;i<=cnt;i++)
d[i]=b[i]=a[i];
sort(b+1,b+1+cnt);
for(int i=cnt;i>=2;i--)
{
if(a[i]==b[i]) continue;
for(int j=1;j<=i-1;j++)
{
if(a[j]==b[i])
{
if(j!=1)
{
tmp=cnt-j+1;
ans[++num]=tmp;
for(int k=0;k<j/2;k++)
swap(a[k+1],a[j-k]);
}
tmp=cnt-i+1;
ans[++num]=tmp;
for(int k=0;k<i/2;k++)
swap(a[1+k],a[i-k]);
}
}
}
cout<<d[1];
for(int i=2;i<=cnt;i++)
cout<<' '<<d[i];
cout<<endl;
for(int i=1;i<=num;i++)
cout<<ans[i]<<' ';
cnt=num=0;
cout<<0<<endl;
}
int main()
{
while(cin>>x)
{
a[++cnt]=x;
c=getchar();
if(c=='\n')
solve();
}
return 0;
}