比赛 26暑假集训模拟赛1 评测结果 AATTTTTTTT
题目名称 最终得分 20
用户昵称 rzzakioi 运行时间 26.636 s
代码语言 C++ 内存使用 3.55 MiB
提交时间 2026-06-29 11:31:09
显示代码纯文本
#include<cstdio>
#include<stack>
#define int long long
using namespace std;
int n,p,a[505],ans;
bool vis[505];
void dfs(int k){
    if(k==n+1){
        stack<int>st[5];
        st[1].push(-1);st[2].push(-1);st[3].push(-1);
        for(int i=1;i<=n;i++){
            int x=-0x3f3f3f3f3f3f3f3f,id=-1;
            for(int j=1;j<=3;j++){
                if(st[j].top()>x&&st[j].top()<a[i]){
                    x=st[j].top();
                    id=j;
                }
            }
            if(id==-1)return;
            st[id].push(a[i]);
        }
        ans++;
        ans%=p;
    }
    else{
        for(int i=1;i<=n;i++){
            if(!vis[i]){
                vis[i]=1;
                a[k]=i;
                dfs(k+1);
                vis[i]=0;
                a[k]=0;
            }
        }
    }
}
signed main(){
    freopen("great.in","r",stdin);
    freopen("great.out","w",stdout);
    scanf("%lld%lld",&n,&p);
    dfs(1);
    printf("%lld",ans);
    return 0;
}