結果
| 問題 |
No.2048 L(I+D)S
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-08-24 10:17:24 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 159 ms / 2,000 ms |
| コード長 | 1,176 bytes |
| コンパイル時間 | 310 ms |
| コンパイル使用メモリ | 30,720 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-11 20:13:47 |
| 合計ジャッジ時間 | 2,334 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 16 |
ソースコード
#include <stdio.h>
const long long mod = 998244353LL;
long long fact_table[200000];
long long invfact_table[200000];
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 < 200000; ++i)
fact_table[i] = fact_table[i - 1] * i % mod;
invfact_table[199999] = pow_mod(fact_table[199999], mod - 2, mod);
for (int i = 199998; i >= 0; --i)
invfact_table[i] = invfact_table[i + 1] * (i + 1) % mod;
}
int main(void)
{
init_table();
long long N;
scanf("%lld", &N);
long long ans = 0LL;
long long e = N * fact_table[N - 2] % mod;
for (long long i = 2; i < N - 1; ++i)
{
long long s = invfact_table[i - 2] * invfact_table[N - i - 2] % mod;
s = s * pow_mod(i, mod - 2, mod) % mod * pow_mod(N - i, mod - 2, mod) % mod;
ans = (ans + (s * e % mod) * (s * e % mod) % mod) % mod;
}
printf("%ld\n", ans);
return 0;
}