与一个已AC的代码对拍了数据范围内的所有数据,但是还是WA
  • 板块学术版
  • 楼主rfsfreffr
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/11/16 11:10
  • 上次更新2023/10/27 02:48:30
查看原帖
与一个已AC的代码对拍了数据范围内的所有数据,但是还是WA
175011
rfsfreffr楼主2022/11/16 11:10

ARC 116D,WA on 01-Handmade-03

Atcoder 有办法下载数据点吗。`

my code:

#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;
}
2022/11/16 11:10
加载中...