| 比赛 |
寒假集训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;
}