解题思路
看了一下,加上我一共有 个人用到了 next_permutation
,占比高达 ,这充分体现了 stl
带给我们的优越感。
回归正题,对于一个集合 , 里面存的是 的所有排列分别组成的数字,我们先将这些数字从小到大排列再加入集合。
令 为 的大小, 为集合中从小到大的第 个数。
根据题意,,得到规律 。题目还要求加上一个数 ,所以我们要在集合 中找出值为 的元素,所以我们就可以看成是 ,即当前序列的下 个排列。
由于 C++ STL
中自带求下一个 排列的函数 next_permutation
,所以我们就可以做出这道题目了。
int main() {
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
while (m--) {
next_permutation(a + 1, a + 1 + n);
}
for (int i = 1; i <= n; i++) cout << a[i] << ' ';
return 0;
}
STL
就是好,希望没有用这个方法的同学们不要……