Submission #38636447
Source Code Expand
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) ((x)&1)
#define even(x) (!odd((x)))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const ll MAXN=210,LIM=200,mod=998244353;
void add(ll&x,ll y){x=(x+y)%mod;}
void sub(ll&x,ll y){x=(x-y+mod)%mod;}
ll mypow(ll a,ll n){
if(!n)return 1;
ll tmp=mypow(a,n/2);tmp=tmp*tmp%mod;
if(n&1)tmp=tmp*a%mod;return tmp;
}
ll myinv(ll a){return mypow(a,mod-2);}
ll P(ll x){return (x%2)?(mod-1):(1);}
//
ll n,m,x;
ll c1[MAXN][MAXN],c2[MAXN][MAXN],fact[MAXN],factinv[MAXN],pw[MAXN];
ll f[MAXN]; //f(i) : i个变量xor=x的方案数
ll g[MAXN]; //g(i) : i个不同变量xor=x的方案数
ll h[MAXN];
ll dp[MAXN][MAXN],dp2[MAXN][MAXN];
ll C(int x,int y){
if(x<=LIM)return c1[x][y];
if(y<0)return 0;
ll res=1;
rep(i,1,y)res=res*((x-i+1)%mod)%mod;
return res*factinv[y]%mod;
}
ll HC(int x,int mode){
if(x)return pw[x-1];
else return !mode;
}
ll H(int x){return P(x-1)*fact[x-1]%mod;}
void pre_solve(ll n){
ll& ans=f[n];
memset(dp,0,sizeof dp);
dp[31][0]=1;
per(i,30,0)rep(j,0,n)if(dp[i+1][j]){
ll ways=dp[i+1][j];
int bit=(x>>i&1);
if(m>>i&1){
rep(k,0,n-j){
add(dp[i][n-k],ways*C(n-j,k)%mod*HC(j,odd(k^bit))%mod);
}
}else{
rep(k,0,j)if(even(k^bit)){
add(dp[i][j],ways*C(j,k)%mod);
}
}
}
ans=dp[0][n];
}
void solve_g(){
memset(dp,0,sizeof dp);
dp[0][0]=dp2[0][0]=1;
rep(i,0,n-1)rep(j,0,n-1){
ll ways=dp[i][j],ways2=dp2[i][j];
rep(k,1,n-j)if(odd(k)){
add(dp[i+1][j+k],ways*factinv[k]%mod*H(k)%mod);
}else{
add(dp2[i+1][j+k],ways2*factinv[k]%mod*H(k)%mod);
}
}
rep(i,0,n)rep(j,0,n)add(h[j],dp2[i][j]*factinv[i]%mod*mypow(m,i)%mod);
rep(i,1,n)rep(j,0,i)rep(k,0,n){
ll ways=dp[j][k]*h[i-k]%mod;
if(!ways)continue;
ways=ways*fact[i]%mod*factinv[j]%mod;
add(g[i],ways*f[j]%mod);
}
rep(i,1,n)g[i]=g[i]*factinv[i]%mod;
}
int main(){
pw[0]=fact[0]=1;rep(i,1,LIM)fact[i]=fact[i-1]*i%mod,pw[i]=pw[i-1]*2%mod;
factinv[LIM]=myinv(fact[LIM]);per(i,LIM-1,0)factinv[i]=factinv[i+1]*(i+1)%mod;
c1[0][0]=1;
rep(i,1,LIM){
c1[i][0]=1;
rep(j,1,i)c1[i][j]=c1[i-1][j],add(c1[i][j],c1[i-1][j-1]);
}
cin>>n>>m>>x;m++;
//
f[0]=g[0]=(x==0);
rep(i,1,n){
pre_solve(i);
}
solve_g();
ll ans=0;
rep(i,0,n/2){
int rest=n-2*i;
ll ways=g[rest];
ways=ways*C(m+i-1,i)%mod;
add(ans,ways);
}
cout<<ans<<"\n";
return 0;
}
Submission Info
Compile Error
./Main.cpp: In function ‘ll mypow(ll, ll)’:
./Main.cpp:21:5: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
21 | if(n&1)tmp=tmp*a%mod;return tmp;
| ^~
./Main.cpp:21:26: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
21 | if(n&1)tmp=tmp*a%mod;return tmp;
| ^~~~~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
600 / 600 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
example0.txt, example1.txt |
| All |
000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, 050.txt, 051.txt, 052.txt, 053.txt, 054.txt, 055.txt, 056.txt, 057.txt, 058.txt, 059.txt, 060.txt, 061.txt, 062.txt, 063.txt, 064.txt, 065.txt, 066.txt, 067.txt, 068.txt, 069.txt, 070.txt, 071.txt, 072.txt, 073.txt, 074.txt, 075.txt, 076.txt, 077.txt, example0.txt, example1.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 000.txt |
AC |
8 ms |
4212 KiB |
| 001.txt |
AC |
4 ms |
4184 KiB |
| 002.txt |
AC |
3 ms |
4172 KiB |
| 003.txt |
AC |
2 ms |
4028 KiB |
| 004.txt |
AC |
43 ms |
4564 KiB |
| 005.txt |
AC |
86 ms |
4568 KiB |
| 006.txt |
AC |
154 ms |
4432 KiB |
| 007.txt |
AC |
183 ms |
4512 KiB |
| 008.txt |
AC |
42 ms |
4352 KiB |
| 009.txt |
AC |
82 ms |
4568 KiB |
| 010.txt |
AC |
40 ms |
4356 KiB |
| 011.txt |
AC |
168 ms |
4412 KiB |
| 012.txt |
AC |
43 ms |
4500 KiB |
| 013.txt |
AC |
83 ms |
4436 KiB |
| 014.txt |
AC |
157 ms |
4352 KiB |
| 015.txt |
AC |
159 ms |
4520 KiB |
| 016.txt |
AC |
42 ms |
4544 KiB |
| 017.txt |
AC |
83 ms |
4432 KiB |
| 018.txt |
AC |
171 ms |
4356 KiB |
| 019.txt |
AC |
44 ms |
4440 KiB |
| 020.txt |
AC |
73 ms |
4480 KiB |
| 021.txt |
AC |
65 ms |
4416 KiB |
| 022.txt |
AC |
69 ms |
4500 KiB |
| 023.txt |
AC |
69 ms |
4412 KiB |
| 024.txt |
AC |
73 ms |
4408 KiB |
| 025.txt |
AC |
44 ms |
4484 KiB |
| 026.txt |
AC |
44 ms |
4540 KiB |
| 027.txt |
AC |
45 ms |
4508 KiB |
| 028.txt |
AC |
49 ms |
4432 KiB |
| 029.txt |
AC |
46 ms |
4536 KiB |
| 030.txt |
AC |
110 ms |
4384 KiB |
| 031.txt |
AC |
62 ms |
4456 KiB |
| 032.txt |
AC |
31 ms |
4332 KiB |
| 033.txt |
AC |
34 ms |
4256 KiB |
| 034.txt |
AC |
24 ms |
4388 KiB |
| 035.txt |
AC |
58 ms |
4408 KiB |
| 036.txt |
AC |
10 ms |
4168 KiB |
| 037.txt |
AC |
120 ms |
4316 KiB |
| 038.txt |
AC |
20 ms |
4316 KiB |
| 039.txt |
AC |
136 ms |
4516 KiB |
| 040.txt |
AC |
65 ms |
4388 KiB |
| 041.txt |
AC |
12 ms |
4336 KiB |
| 042.txt |
AC |
6 ms |
4144 KiB |
| 043.txt |
AC |
36 ms |
4324 KiB |
| 044.txt |
AC |
2 ms |
4212 KiB |
| 045.txt |
AC |
42 ms |
4484 KiB |
| 046.txt |
AC |
32 ms |
4348 KiB |
| 047.txt |
AC |
47 ms |
4272 KiB |
| 048.txt |
AC |
169 ms |
4512 KiB |
| 049.txt |
AC |
164 ms |
4544 KiB |
| 050.txt |
AC |
163 ms |
4504 KiB |
| 051.txt |
AC |
161 ms |
4508 KiB |
| 052.txt |
AC |
158 ms |
4416 KiB |
| 053.txt |
AC |
44 ms |
4408 KiB |
| 054.txt |
AC |
167 ms |
4496 KiB |
| 055.txt |
AC |
173 ms |
4436 KiB |
| 056.txt |
AC |
179 ms |
4500 KiB |
| 057.txt |
AC |
172 ms |
4424 KiB |
| 058.txt |
AC |
161 ms |
4580 KiB |
| 059.txt |
AC |
159 ms |
4408 KiB |
| 060.txt |
AC |
165 ms |
4500 KiB |
| 061.txt |
AC |
168 ms |
4416 KiB |
| 062.txt |
AC |
173 ms |
4544 KiB |
| 063.txt |
AC |
167 ms |
4576 KiB |
| 064.txt |
AC |
154 ms |
4352 KiB |
| 065.txt |
AC |
158 ms |
4564 KiB |
| 066.txt |
AC |
143 ms |
4564 KiB |
| 067.txt |
AC |
164 ms |
4436 KiB |
| 068.txt |
AC |
150 ms |
4436 KiB |
| 069.txt |
AC |
141 ms |
4408 KiB |
| 070.txt |
AC |
143 ms |
4540 KiB |
| 071.txt |
AC |
176 ms |
4540 KiB |
| 072.txt |
AC |
163 ms |
4496 KiB |
| 073.txt |
AC |
156 ms |
4500 KiB |
| 074.txt |
AC |
155 ms |
4524 KiB |
| 075.txt |
AC |
157 ms |
4568 KiB |
| 076.txt |
AC |
161 ms |
4412 KiB |
| 077.txt |
AC |
179 ms |
4540 KiB |
| example0.txt |
AC |
3 ms |
4220 KiB |
| example1.txt |
AC |
171 ms |
4540 KiB |