結果
問題 |
No.8120 Aoki's Present for Takahashi
|
ユーザー |
![]() |
提出日時 | 2025-04-01 22:02:16 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,493 bytes |
コンパイル時間 | 3,674 ms |
コンパイル使用メモリ | 285,184 KB |
実行使用メモリ | 8,064 KB |
最終ジャッジ日時 | 2025-04-01 23:13:14 |
合計ジャッジ時間 | 9,253 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | WA * 20 |
ソースコード
#include <atcoder/math> #include <atcoder/modint> #include <bits/stdc++.h> using namespace std; typedef long long ll; // const int MOD = 1000000007; const int p0 = 443; const int p1 = 2253371; const int MOD = 998243353; // 443 * 2253371 using mint0 = atcoder::dynamic_modint<0>; using mint1 = atcoder::dynamic_modint<1>; struct comb0 { vector<mint0> fact, finv, inv; comb0(int n) : fact(n + 1), finv(n + 1), inv(n + 1) { fact[0] = finv[0] = inv[1] = fact[1] = finv[1] = 1; for (int i = 2; i < n; i++) { fact[i] = fact[i - 1] * i; inv[i] = -inv[MOD % i] * (MOD / i); finv[i] = finv[i - 1] * inv[i]; } } mint0 c(ll n, ll r) { if (n < r || n < 0 || r < 0) return 0; return fact[n] * finv[r] * finv[n - r]; } }; struct comb1 { vector<mint1> fact, finv, inv; comb1(int n) : fact(n + 1), finv(n + 1), inv(n + 1) { fact[0] = finv[0] = inv[1] = fact[1] = finv[1] = 1; for (int i = 2; i < n; i++) { fact[i] = fact[i - 1] * i; inv[i] = -inv[MOD % i] * (MOD / i); finv[i] = finv[i - 1] * inv[i]; } } mint1 c(ll n, ll r) { if (n < r || n < 0 || r < 0) return 0; return fact[n] * finv[r] * finv[n - r]; } }; int main() { mint0::set_mod(p0); mint1::set_mod(p1); int tt, tau; cin >> tt >> tau; comb0 c0(2e5 + 10); comb1 c1(2e5 + 10); for (int t = 1; t <= tau; t++) { int n, m; cin >> n >> m; if (t == tt) { cout << -1 << endl; } else { cout << atcoder::crt({c0.c(m, n).val(), c1.c(m, n).val()}, {p0, p1}).first << endl; } } return 0; }