POJ1833(字典序的排序算法)

来源:互联网 发布:画图visio软件下载 编辑:程序博客网 时间:2024/05/18 20:07
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;//Accepted168K454MSC++bool gen_perm(int *a, int n) {    if(n == 1) { return false;}    int i, j, k, t;    for(j = n-2; j >= 0; j--) {        if(a[j] < a[j+1]) { break; }        if(j == -1 && a[0] > a[1]) { return false;} ///"j == -1"  let me WA  n 次!    }    for(k = n-1; k >= 0; k--) { if(a[k] > a[j]) break; }    swap(a[j], a[k]);    for(i = j+1, t = n-1; i <= t; i++, t--) {        swap(a[i], a[t]);    }    return true;}int main(){    int num[1024+10];    int T, n;    int p;    scanf("%d", &T);    while(T--) {        scanf("%d%d", &n, &p);        for(int i = 0; i < n; i++) {            scanf("%d", &num[i]);        }        while(p--) {            if(gen_perm(num, n) == false) {                sort(num, num+n);                break;            }        }        for(int i = 0; i < n-1; i++) {            printf("%d ", num[i]);        }        printf("%d\n", num[n-1]);    }    return 0;}//此题用STL也很方便,STL版本在ACM_STL专项里面。