打乱的连续序列,想要变成上升序列的话,每次交换前两个数字,使a1<a2,并把a1放在最后面,直到a1为n,a2为1。这里倒着来就可以了.
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <vector> using namespace std; vector<int> aa,ans; int n; int main() { while(~scanf("%d",&n)&&n) { int a; aa.clear();ans.clear(); for(int i=0;i<n;i++) { scanf("%d",&a); aa.push_back(a); } while(1) { if(aa[0]==1) { int flag=1; for(int i=0;i<n;i++) if(aa[i]!=i+1) {flag=0;break;} if(flag) break; } if(aa[0]<aa[1]||aa[0]==n&&aa[1]==1) { ans.push_back(2); aa.insert(aa.begin(),aa[n-1]); aa.erase(aa.end()-1); } else { swap(aa[0],aa[1]); ans.push_back(1); } } for(int i=ans.size()-1;i>=0;i--) printf("%d",ans[i]); printf("\n"); } return 0; }