next_permutation

next_permutation 可以生成下一个排列,结合 do while 循环可以生成全排列。

P1706 全排列问题

https://www.luogu.com.cn/problem/P1706

#include <bits/stdc++.h>
using namespace std;
int n, a[10];
int main()
{
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        a[i] = i + 1;
    }
    do
    {
        for (int i = 0; i < n; i++)
        {
            cout << "    " << a[i];
        }
        cout << endl;
    }
    while (next_permutation(a, a + n));
    return 0;
}

如果数组中有重复的数字会怎样?
只会生成所有不同的排列。

abc221_c Select Mul

https://atcoder.jp/contests/abc221/tasks/abc221_c
输入一个数字,把这个数字的各位分成两部分并重排,问重排之后的最大乘积是多少

abc150_c Count Order

https://atcoder.jp/contests/abc150/tasks/abc150_c
输入两个排列P和Q,假设是第a个和第b个排列,输出abs(a-b)

abc145_c Average Length

https://atcoder.jp/contests/abc145/tasks/abc145_c
输入n个点,想访问所有点有n!个顺序,每种顺序可以算一个总距离,问这n!个距离平均值是什么

abc215_c One More aab aba baa

https://atcoder.jp/contests/abc215/tasks/abc215_c
输入一个字符串,问全排列第k小的字典序是什么,输入的字符串可能有重复字母

CF124B Permutations

https://codeforces.com/problemset/problem/124/B
输入n个k位数字,你可以重排这n个数字各个位上的值,问这n个数字的最大值减最小值最大是多少

  1. next_permutation
    1. P1706 全排列问题
    2. abc221_c Select Mul
    3. abc150_c Count Order
    4. abc145_c Average Length
    5. abc215_c One More aab aba baa
    6. CF124B Permutations