题目大意
解题思路
(1) 很明显,应该使用next_permutation
函数.
(2) 注意点:
- 当数组达到降序,如
3,2,1
时,在进行next_permutation
,会返回false
。在此基础上再进行一次next_permutation
,将生成1,3,2
,即跳过了1,2,3
。
(3) 基于此,我们先维护一个有序数组,每当k
还没结束,我们就用有序数组给原数组重新赋值.
代码
#include<iostream>
#include<algorithm>
using namespace std;
int a[1024];
int b[1024];
int main()
{
int t;
cin >> t;
while(t--)
{
int n, k;
cin >> n >> k;
for(int i=0; i<n; i++)
cin >> a[i];
for(int i=0; i<n; i++)
b[i] = a[i];
sort(b, b+n);
do{
k--;
int not_over = next_permutation(a, a+n);
if(not_over == 0)
{
for(int i=0; i<n; i++)
a[i] = b[i];
}
}while(k);
for(int i=0; i<n; i++)
cout << a[i] << " ";
cout << endl;
}
return 0;
}