結果
| 問題 | No.2033 Chromatic Duel |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-08-24 11:02:45 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,733 bytes |
| 記録 | |
| コンパイル時間 | 224 ms |
| コンパイル使用メモリ | 30,720 KB |
| 実行使用メモリ | 12,800 KB |
| 最終ジャッジ日時 | 2024-10-11 20:48:20 |
| 合計ジャッジ時間 | 2,105 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 11 WA * 26 |
ソースコード
#include <stdio.h>
const long long mod = 998244353LL;
long long fact_table[700000];
long long invfact_table[700000];
long long pow_mod(long long a, long long k, long long m)
{
long long ret = 1LL;
while (k > 0)
{
if (k & 1)
ret = (long long)((__int128_t)ret * a % m);
a = (long long)((__int128_t)a * a % m);
k >>= 1;
}
return ret;
}
void init_table(void)
{
fact_table[0] = 1;
for (int i = 1; i < 700000; ++i)
fact_table[i] = fact_table[i - 1] * i % mod;
invfact_table[699999] = pow_mod(fact_table[699999], mod - 2, mod);
for (int i = 699998; i >= 0; --i)
invfact_table[i] = invfact_table[i + 1] * (i + 1) % mod;
}
long long nCr_mod(long long n, long long r, long long m)
{
if (r == 0)
return 1;
if (n < 0 || r < 0)
return 0;
if (n < r)
return 0;
return fact_table[n] * invfact_table[r] % m * invfact_table[n - r] % m;
}
int main(void)
{
init_table();
long long n, b, w;
scanf("%lld %lld %lld", &n, &b, &w);
long long k = n - b;
long long ans = 0LL;
for (long long i = 0; i < 3; ++i)
{
if (k < i)
continue;
long long c = k - i - w;
if (2 * (b - 1) < c)
continue;
for (long long j = 0; j < b; ++j)
{
if (j * 2 > c)
continue;
long long t = nCr_mod(b - 1 - j, c - j * 2, mod) * nCr_mod(b - 1, j, mod) % mod;
if (j == 1)
ans = (ans + (t * nCr_mod(i + j + w - 1, w, mod) % mod) * 2) % mod;
else
ans = (ans + (t * nCr_mod(i + j + w - 1, w, mod) % mod)) % mod;
}
}
printf("%lld\n", ans);
return 0;
}