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

const int N = 15;

int vis[N],q[N],s[N],p[N],n,cnt;

void dfs(int idx){
    if(idx==n-1){
        for(int i=0;i<n;i++)s[i]=i;
        for(int i=0;i<n-1;i++){
            swap(s[q[i]],s[q[i]+1]);
        }
//        printf("\n");
        bool iok=true;
        for(int i=0;i<=n-1;i++){
//            printf("%d ",s[i]);
            if(s[i]!=p[i])iok=false;
        } 
        if(iok)cnt++;
//        printf("\n");
    }
    for(int i=0;i<=n-2;i++){
        if(!vis[i]){
            vis[i]=1;
            q[idx]=i;
            dfs(idx+1);
            vis[i]=0;
        }
    }
}

int main(){
    freopen("swap.in","r",stdin);
    freopen("swap.out","w",stdout);
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&p[i]);
    }
    dfs(0);
    printf("%d",cnt);
    return 0;
}