UVA 11925 - Generating Permutations

 这道题要反方向思考,把题中给的序列转为升序序列,运用冒泡排序,但要注意特殊情况,当序列中的第二个数字为1时,直接把数字从序列尾放到序列头。
#include <iostream>
#include <queue>
#include <cstdio>
#include <vector>

using namespace std;

deque<int> num;
vector<int> ans;
int n;
bool judge()
{
    for(int i = 1; i < n; i++)
    {
        if(num[i] < num[i-1])
            return true;
    }
    return false;
}
int main()
{
  //  freopen("in.txt", "r", stdin);
    while(cin >> n && n)
    {
        num.clear();
        ans.clear();
        for(int i = 0; i < n; i++)
        {
            int m;
            cin >> m;
            num.push_back(m);
        }
        while(judge())
        {
            if(num[0] < num[1] || num[1] == 1)
            {
                int m = num.back();
                num.pop_back();
                num.push_front(m);
                ans.push_back(2);
            }
            else{
                    swap(num[0], num[1]);
                    ans.push_back(1);
            }
        }
            for(int i = ans.size() - 1; i >= 0; i--)
                cout << ans[i];
        cout << endl;
    }

    return 0;
}
 
 
 

你可能感兴趣的:(UVA 11925 - Generating Permutations)