社区讨论

为何register优化了以后反而跑得更慢了???

P2051[AHOI2009] 中国象棋参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi6mcw0j
此快照首次捕获于
2025/11/20 07:14
4 个月前
此快照最后确认于
2025/11/20 07:14
4 个月前
查看原帖
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#define inf 2147483647
#define rr register
using namespace std;
typedef long long ll;
const int mod=9999973;
const int maxn=110;
inline int read(){
    int misaka=0,mikoto=1;
    char c=getchar();
    while(c<'0' || c>'9'){
        if(c=='-')
            mikoto=-1;
        c=getchar();
    }
    while(c>='0' && c<='9'){
        misaka=misaka*10+(int)(c-'0');
        c=getchar();
    }
    return misaka*mikoto;
}
inline int qiuhe( int num ) { 
    return num*(num-1)/2;
}
ll p[maxn][maxn][maxn]={0};
int main(){
    int n;
    int m;
    n=read();
    m=read();
    p[0][0][0]=1;
    for(rr int i=0;i<n;i++){
        for(rr int j=0;j<=m;j++){
            for(rr int k=0;k+j<=m;k++){
                if(p[i][j][k])
                    p[i+1][j][k]=((p[i+1][j][k]+p[i][j][k]))%mod;
                if((m-j-k)>=1)
                    p[i+1][j+1][k]=((p[i+1][j+1][k]+(p[i][j][k]*(m-j-k))))%mod;
                if(j>=1)
                    p[i+1][j-1][k+1]=((p[i+1][j-1][k+1])+(p[i][j][k]*j))%mod;
                if((m-j-k)>=2)
                    p[i+1][j+2][k]=((p[i+1][j+2][k])+(p[i][j][k]*qiuhe(m-j-k)))%mod;
                if(((m-j-k)>=1)&&(j>=1))
                    p[i+1][j][k+1]=((p[i+1][j][k+1])+(p[i][j][k]*(m-j-k)*j))%mod;
                if(j>=2)
                    p[i+1][j-2][k+2]=((p[i+1][j-2][k+2])+(p[i][j][k]*qiuhe(j)))%mod;
            }
        }
    }
    ll ans=0;
    for(int i=0;i<=m;i++){
        for(int j=0;j+i<=m;j++){
            ans=(ans+p[n][i][j])%mod;
        }
    }
    cout<<ans<<endl;
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...