結果
問題 | No.3004 ヤング図形 |
ユーザー |
![]() |
提出日時 | 2025-01-17 22:54:35 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,288 bytes |
コンパイル時間 | 5,156 ms |
コンパイル使用メモリ | 322,944 KB |
実行使用メモリ | 1,569,152 KB |
最終ジャッジ日時 | 2025-01-17 22:55:42 |
合計ジャッジ時間 | 53,084 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | MLE * 3 |
other | TLE * 3 MLE * 22 |
ソースコード
#include <iostream>#include <vector>using namespace std;const int MOD = 998244353;const int N = 100000002; // 配列サイズ (注意: メモリに十分な容量が必要)// 階乗とその逆元を保持する配列vector<long long> F(N, 1);// 高速累乗法long long mod_pow(long long base, long long exp, long long mod) {long long result = 1;while (exp > 0) {if (exp % 2 == 1) {result = result * base % mod;}base = base * base % mod;exp /= 2;}return result;}// 組み合わせ計算関数long long comb(long long a, long long b) {if (b < 0 || a < b) return 0;return F[a] * mod_pow(F[b], MOD - 2, MOD) % MOD * mod_pow(F[a - b], MOD - 2, MOD) % MOD;}int main() {// 階乗の前計算for (int i = 2; i < N; i++) {F[i] = F[i - 1] * i % MOD;}long long ans = 1;int k;cin >> k;long long cnt = 0;for (int t = 0; t < k; t++) {long long l, m;cin >> l >> m;long long tmp = 1;for (int i = 0; i < m; i++) {tmp = comb(l * (i + 1) - 1, l - 1) * tmp % MOD;}ans = ans * tmp % MOD * comb(l * m + cnt, cnt) % MOD;cnt += l * m;}cout << ans << endl;return 0;}