求助
查看原帖
求助
751073
wuxiyi楼主2023/10/13 13:52

样例过不了。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long

const int mod=998244353;

int n,A,B,C;
int dp[64][10][10][10][2][2][2][2][2][2];
/*
di 1 wei biao shi dang qian chu li dao na yi wei 
di 2 wei biao shi xian zai x1%A de zhi
		......
di 5 wei biao shi xian zai x1 shi fou qu dao neng qu de zui da zhi
	1 biao shi yi qu dao zui da zhi
	0 biao shi wei qu dao zui da zhi
		......
di 8 wei biao shi xian zai x1 shi fou wei 0
	1 biao shi x1=0
	0 biao shi x1!=0
		......
*/
int bin[64],cnt=0;

int dfs(int a,int b,int c,int d,int e,int f,int g,int h,int i,int j){
	if (!a)	return dp[a][b][c][d][e][f][g][h][i][j]=((!b)&&(!c)&&(!d)&&(!h)&&(!i)&&(!j));
	if (dp[a][b][c][d][e][f][g][h][i][j]!=-1)	return dp[a][b][c][d][e][f][g][h][i][j];
	/*
	   x1 x2 x3
	1.  0  0  0 
	2.  1  1  0
	3.  1  0  1
	4.  0  1  1
	*/
/*1*/	int res=dfs(a-1,(b<<1)%A,(c<<1)%B,(d<<1)%C,e&!bin[a],f&!bin[a],g&!bin[a],h,i,j);
/*2*/	if ((e==0||bin[a]) && (f==0||bin[a]))	res=(res+dfs(a-1,(b<<1|1)%A,(c<<1|1)%B,(d<<1)%C,e,f,g&&!bin[a],0,0,j))%mod;
/*3*/	if ((e==0||bin[a]) && (g==0||bin[a]))	res=(res+dfs(a-1,(b<<1|1)%A,(c<<1)%B,(d<<1|1)%C,e,f&&!bin[a],g,0,i,0))%mod;
/*4*/	if ((f==0||bin[a]) && (g==0||bin[a]))	res=(res+dfs(a-1,(b<<1)%A,(c<<1|1)%B,(d<<1|1)%C,e&&!bin[a],f,g,h,0,0))%mod;
	return dp[a][b][c][d][e][f][g][h][i][j]=res;
}

signed main(){
	scanf("%lld%lld%lld%lld",&n,&A,&B,&C);
	while (n)	bin[++cnt]=n&1,n>>=1;
	memset(dp,-1,sizeof(dp));
	printf("%lld\n",dfs(cnt,0,0,0,1,1,1,0,0,0)%mod);
	return 0;
}

求助!!!

2023/10/13 13:52
加载中...