社区讨论
为何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 条回复,欢迎继续交流。
正在加载回复...