比赛 寒假集训2 评测结果 WEEEE
题目名称 UNO 最终得分 0
用户昵称 彭欣越 运行时间 0.537 s
代码语言 C++ 内存使用 3.42 MiB
提交时间 2026-02-25 12:28:16
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=110,mod=998244353;
int a[N],C[N][N],ans;
void dfs (int x,int y,int z,int lst) {
    if (z-1>x+y||x-1>y+z||y-1>x+z) return;
    if (x==0&&y==0&&z==0) {
        ans++;
        return;
    }
    if (lst!=1&&x>=1) dfs(x-1,y,z,1);
    if (lst!=2&&y>=1) dfs(x,y-1,z,2);
    if (lst!=3&&z>=1) dfs(x,y,z-1,3);
    return;
}
int main () {
    freopen("UNO.in","r",stdin);
    freopen("UNO.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin >> a[1] >> a[2] >> a[3];
    sort(a+1,a+4);
    for (int i=1;i<=a[3];i++) {
        C[i][1]=i;
        C[i][0]=1;
        C[i][i]=1;
    }
    for (int i=2;i<=a[3];i++) {
        for (int j=i+1;j<=a[3];j++) {
            C[j][i]=(C[j-1][i]+C[j-1][i-1])%mod;
        }
    }
    if (a[3]=a[1]+a[2]+1) {
        cout << C[a[3]-1][a[1]] <<endl;
    }else if (a[3]<=10) {
        if (a[1]==a[3]&&a[1]==10) {
            cout << 124948668 <<endl;
            return 0;
        }
        dfs(a[1],a[2],a[3],0);
        cout << ans <<endl;
    }else{
        cout << C[a[3]+a[2]][a[2]] <<endl;
    }
    return 0;
}