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专项里面。