比赛 国庆欢乐赛3 评测结果 AATTTTTTTT
题目名称 毛二琛 最终得分 20
用户昵称 xuyuqing 运行时间 16.034 s
代码语言 C++ 内存使用 3.49 MiB
提交时间 2025-10-05 11:50:47
显示代码纯文本

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <iostream>

using namespace std;

const int N = 5114;
const long long MOD = 1e9 + 7;

int n;
int nums[N];
int pairCc;
bool vis[N];
long long res;

void dfs (int now) {
    if (now == n - 1) {
        for (int i = 0; i < n; i++) {
            if (i != nums[i]) {
                return;
            }
        }
        res++;
        return;
    }
    
    for (int i = 0; i < n - 1; i++) {
        if (!vis[i]) {
            swap (nums[i], nums[i + 1]);
            vis[i] = true;
            dfs (now + 1);
            vis[i] = false;
            swap (nums[i], nums[i + 1]);
        }
    }
}

int main () {
    
    freopen ("swap.in", "r", stdin);
    freopen ("swap.out", "w", stdout);
    
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
        for (int j = 0; j < i; j++) {
            if (nums[j] > nums[i]) {
                pairCc++;
                int num1 = i - j;
                int num2 = nums[j] - nums[i];
            }
        }
    }
    
    if (pairCc != n - 1) {
        cout << 0 << endl;
        return 0;
    }
    
    dfs (0);
    
    cout << res << endl;
    
    return 0; 
}