比赛 国庆欢乐赛2 评测结果 AAAAATTTATTTTTTTTTTT
题目名称 排列 最终得分 30
用户昵称 xuyuqing 运行时间 29.060 s
代码语言 C++ 内存使用 32.24 MiB
提交时间 2025-10-04 11:36:48
显示代码纯文本

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <unordered_set>

using namespace std;

int n;
int nums[22];
unordered_set<unsigned long long> s;

void dfs () {
    unsigned long long num = 0;
    unsigned long long power = 1;
    for (int i = 1; i <= n; i++) {
        num += nums[i] * power;
        power *= 10;
    }
    if (s.count(num)) {
        return;
    }
    s.insert(num);
    for (int i = 1; i <= n; i++) {
        for (int j = i + 1; j <= n; j++) {
            if (nums[i] > nums[j]) {
                swap (nums[i], nums[j]);
                dfs ();
                swap (nums[i], nums[j]);
            }
        }
    }
}

int main () {
    
    freopen ("changgao_perm.in", "r", stdin);
    freopen ("changgao_perm.out", "w", stdout);
    
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> nums[i];
    }
    
    dfs ();
    
    cout << s.size() << endl;
    
    return 0;
}