AcWing 420. 火星人
原题链接
中等
作者:
Value
,
2020-09-08 09:38:07
,
所有人可见
,
阅读 438
原生next_permutation()
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e4 + 10;
int num[N];
int main(){
int n, add; cin >> n >> add;
for(int i = 0; i < n; i ++ ) cin >> num[i];
int i = 0;
do{
if(i == add) for(int i = 0; i < n; i ++ ) cout << num[i] << ' ';
i ++ ;
}while(next_permutation(num, num + n) && i <= add);
return 0;
}
方法二(实现一遍next_permutation)
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1E4 + 10;
int a[N];
int main(){
int n, add; cin >> n >> add;
for(int i = 0; i < n; i ++ ) cin >> a[i];
while( add -- ){
int k = n - 2;
while(a[k] > a[k + 1]) k -- ;
int p = k ++ ;
while(a[p] < a[k] && k < n) k ++ ;
swap(a[p], a[ -- k]);
reverse(a + p + 1, a + n);
}
for(int i = 0; i < n; i ++ ) cout << a[i] << ' ';
return 0;
}