| 记录编号 |
612681 |
评测结果 |
AAAAA |
| 题目名称 |
[HSOI 2020] UNO |
最终得分 |
100 |
| 用户昵称 |
终焉折枝 |
是否通过 |
通过 |
| 代码语言 |
C++ |
运行时间 |
1.750 s |
| 提交时间 |
2026-02-25 16:47:12 |
内存使用 |
34.18 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod = 998244353;
const ll N = 2e6 + 100;
ll n, m, k;
ll fac[N + 100], inv[N + 100];
ll ans;
ll mpow(ll aa,ll bb){
ll res = 1;
while(bb){
if (bb&1) res = res * aa % mod;
aa = aa * aa % mod;
bb >>= 1;
}
return res;
}
ll C(ll aa,ll bb){
if(aa < 0 || bb < 0 || aa > bb) return 0;
return fac[bb] * inv[aa] % mod * inv[bb - aa] % mod;
}
int main(){
freopen("UNO.in","r",stdin);
freopen("UNO.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> m >> k;
fac[0] = 1;
for(int i = 1;i <= N;i ++) fac[i] = (fac[i - 1] * i) % mod;
for(int i = 0;i <= N;i ++) inv[i] = mpow(fac[i], mod - 2);
for(int i = 1;i <= n;i ++){
ans += C(i - 1, n - 1) * C(i - 2, m - 1) % mod * C(k - n - m + 2 * i - 1, 2 * i) % mod;
ans += C(i - 1, n - 1) * C(i - 1, m - 1) % mod * C(k - n - m + 2 * i, 2 * i + 1) % mod * 2 % mod;
ans += C(i - 1, n - 1) * C(i, m-1) % mod * C(k - n - m + 2 * i + 1, 2 * i + 2) % mod;
}
cout << (ans + mod) % mod<<'\n';
return 0;
}