PKU 2275 Flipping Pancake
http://poj.org/problem?id=2275
1からNまで適当に並んだN個の数列がある。
この時、この数列の最初からk番目までの数字の並びを逆転させる操作を繰り返してソートされた状態にしたい。
その手順を出力しろというような問題。
大きいほうから並べていくシミュレーションをしてその手順を出力しました。
main(){ int n; while(cin>>n,n){ int in[n]; rep(i,n)cin>>in[i]; vector<int> ans; for(int i=n;i;--i){ for(int j=0;j<i-1;++j){ if(in[j]==i){ reverse(in,in+j+1); reverse(in,in+i); if(j)ans.pb(j+1); if(i)ans.pb(i); } } } cout<<SZ(ans); FOR(it,ans)cout<<' '<<*it;cout<<endl; } }