比赛 |
2024暑假C班集训B |
评测结果 |
ATEEE |
题目名称 |
UNO |
最终得分 |
20 |
用户昵称 |
liuyiche |
运行时间 |
2.682 s |
代码语言 |
C++ |
内存使用 |
3.38 MiB |
提交时间 |
2024-07-11 11:52:53 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, m, k;
ll f[105][105][105][3][2];
int mod = 998244353;
inline ll dfs(int a, int b, int c, int p, int s)
{
if(a > n || b > m || c > k)
return 0;
if(f[a][b][c][p][s] != 0)
return f[a][b][c][p][s];
if(a == n && b == m && c == k)
return 1;
ll ans = 0;
int tmp1 = a, tmp2 = b, tmp3 = c;
if(p == 1)
a++;
else if(p == 2)
b++;
else
c++;
if(s == 0)
{
ans += dfs(a,b,c,(p+1)%3,0);
ans %= mod;
ans += dfs(a,b,c,(p-1+3)%3,1);
ans %= mod;
}
else
{
ans += dfs(a,b,c,(p-1+3)%3,1);
ans %= mod;
ans += dfs(a,b,c,(p+1)%3,0);
ans %= mod;
}
return f[tmp1][tmp2][tmp3][p][s] = ans;
}
int main()
{
freopen("UNO.in", "r", stdin);
freopen("UNO.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> m >> k;
dfs(0,0,0,1,0);
dfs(0,0,0,2,0);
dfs(0,0,0,0,0);
dfs(0,0,0,1,1);
dfs(0,0,0,2,1);
dfs(0,0,0,0,1);
ll anss = 0;
for(int i = 0; i <= 2; ++i)
for(int j = 0; j <= 1; ++j)
{
anss += f[0][0][0][i][j];
anss %= mod;
}
cout << anss/4;
return 0;
}