比赛 国庆欢乐赛3 评测结果 AATTTTTTTT
题目名称 毛二琛 最终得分 20
用户昵称 zhyn 运行时间 16.078 s
代码语言 C++ 内存使用 3.51 MiB
提交时间 2025-10-05 11:43:22
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;

#define maxn 5005

#define ll long long
int num[maxn];
int q[maxn];
int n;
int k[maxn];
bool vis[maxn];
ll ans=0;

void solv(){
    for(int i=1;i<=n;i++){
        k[i]=i-1;
    }
    for(int i=1;i<n;i++){
        swap(k[q[i]],k[q[i]+1]);
    }
    bool flag=true;
    
    for(int i=1;i<=n;i++){
        if(k[i]!=num[i]){
            flag=false;
            break;
        }
    }
    if(flag){
        ans++;
    }
}

void dfs(int s){
    if(s==n){
        solv();
    }
    for(int i=1;i<n;i++){
        if(!vis[i]){
            vis[i]=true;
            q[s]=i;
            dfs(s+1);
            vis[i]=false;
        }
    }
        
}

int main(){
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    
    freopen("swap.in","r",stdin);
    freopen("swap.out","w",stdout);
    
    cin>>n;
    
    for(int i=1;i<=n;i++){
        cin>>num[i];
    }
    
    dfs(1);
    cout<<ans;
    
    
    
    return 0;
}