- lizexuan's blog
【04NOIP普及组】火星人
- 2023-7-14 18:37:20 @
题目:
题目解析
先看通过记录
这里,我们先介绍一个函数next_permutation
next_permutation
是一个原地算法(会直接改变这个集合,而不是返回一个集合),它对一个可以遍历的集合(如string
,如vector
),将迭代器范围 [first, last]
的排列 排列到下一个排列(第一个是名词,第二个是动词,第三个是名词),其中所有排列的集合默认按照operator <
或者 字典序 或者 按照输入到第三个参数 comp
的排列方法排列。如果存在这样的“下一个排列”,返回true
并执行排列,否则返回false
。
本题我们看
下面的代表数字都不用管它
我们看上面
123 -> 132 -> 213 -> 231 ->312 -> 321
这不就是全排列吗?!
所以我们甭管什么,直接使用next_permutation
排序次就OK了
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, m, x;
cin >> n >> m;
vector<int> vec;
for(int i = 1; i <= n; i++){
cin >> x;
vec.push_back(x);
}
while(m--){
next_permutation(vec.begin(), vec.end());
}
for(auto p : vec){
cout << p << ' ';
}
return 0;
}