比赛 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;
}