题解
2026-09-09 13:28:00
发布于:山西
4阅读
0回复
0点赞
代码:
#include<bits/stdc++.h>
#define LL long long
#define fr(x) freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);
using namespace std;
const int N=2005;
int n,m,mod,C[N][N],jc[N],f[N][N],g[N][N][2][2][2];
inline void ad(int &x,int y){(x+=y)>=mod&&(x-=mod);}
inline void ad(int &x,LL y){x=(x+y)%mod;}
inline int ksm(int x,int p){int s=1;for(;p;(p&1)&&(s=(LL)s*x%mod),x=(LL)x*x%mod,p>>=1);return s;}
int main()
{
cin.tie(0)->sync_with_stdio(0);cin>>n>>m>>mod;
for(int i=*jc=1;i<=n;i++) jc[i]=(LL)jc[i-1]*i%mod;
for(int i=*C[0]=1;i<=max(n,m);i++) for(int j=*C[i]=1;j<=i;j++)
ad(C[i][j]=C[i-1][j],C[i-1][j-1]);
for(int i=0;i<=n;i++){
*f[i]=ksm(n+m,i);
for(int j=1;j<=m;j++) f[i][j]=((LL)f[i][j-1]*n+mod-g[i][j-1][1][0][0])%mod;
for(int j=0;j<=m;j++){
ad(g[i+1][j][1][0][0],(LL)f[i][j]*(i+1));
for(int o:{0,1}) for(int p:{0,1})
ad(g[i+1][j][o^1][p][0],(LL)(g[i][j][o][p][0]+g[i][j][o][p][1])*(i+1)),
ad(g[i][j+1][o][p^1][1],(LL)g[i][j][o][p][0]*(j+1));
}
}
return cout<<f[n][m],0;
}
这里空空如也







有帮助,赞一个