社区讨论
与一个已AC的代码对拍了数据范围内的所有数据,但是还是WA
学术版参与者 3已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo7jf9s9
- 此快照首次捕获于
- 2023/10/27 02:48 2 年前
- 此快照最后确认于
- 2023/10/27 02:48 2 年前
ARC 116D,WA on 01-Handmade-03
Atcoder 有办法下载数据点吗。`
my code:
CPP#include <bits/stdc++.h>
using namespace std;
const int N=5055;
const int mod=998244353;
int dp[16][N];
int fac[N];
int n,m;
int inv[N];
int pow2[N];
int poww(int a,int b) {
int ans=1;
int sz=a;
while(b) {
if(b&1) ans=1ll*ans*sz%mod;
sz=1ll*sz*sz%mod;
b>>=1;
}
return ans;
}
void init() {
fac[1]=1;
for(int i=2; i<=5000; i++)
fac[i]=1ll*fac[i-1]*i%mod;
for(int i=1; i<=5000; i++)
inv[i]=poww(fac[i],mod-2);
pow2[0]=1;
for(int i=1; i<=16; i++)
pow2[i]=pow2[i-1]*2;
}
int C(int n,int m) {
if(m>n) return 0;
if(m==0) return 1;
return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main() {
// freopen("a.txt","w",stdout);
init();
cin>>n>>m;
// for(int n=1; n<=5000; n++) {
// m=5000;
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=0; i<=14; i++) {
for(int j=0; j<=m; j++) {
if(dp[i][j]==0) continue;
for(int k=0; k<=n; k+=2) {
if(j+1ll*k*pow2[i]>1ll*m) continue;
dp[i+1][j+k*pow2[i]]=(dp[i+1][j+k*pow2[i]]+1ll*dp[i][j]*C(n,k)%mod)%mod;
}
}
}
// printf("\n");
// for(int j=1; j<=5000; j++)
// printf("(%d,%d):%d\n",n,j,dp[15][j]);
// printf("\n");
// }
printf("%d",dp[15][m]);
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...