社区讨论

与一个已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 条回复,欢迎继续交流。

正在加载回复...