結果
問題 |
No.3145 Astral Parentheses Sequence
|
ユーザー |
|
提出日時 | 2025-05-16 23:21:00 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 865 bytes |
コンパイル時間 | 4,226 ms |
コンパイル使用メモリ | 257,948 KB |
実行使用メモリ | 16,072 KB |
最終ジャッジ日時 | 2025-05-16 23:21:10 |
合計ジャッジ時間 | 9,032 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 5 TLE * 1 -- * 39 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using ll = long long; using mint = atcoder::modint; /* (X)(Y) (*(X)) ((X)*) (*(*)(*)) ((*)*(*)) */ int main(){ int n, m; cin >> n >> m; if(n % 3 != 0){ cout << "0\n"; return 0; } n /= 3; mint::set_mod(m); vector<vector<mint>> dp(n + 1, vector<mint>(n + 1)); vector<vector<mint>> dp2(n + 1, vector<mint>(n + 1)); auto rec = [&](auto rec, int l, int r, int s) -> mint { if(l == r) return 1; if(l + 1 == r) return 1; mint res = 0; if(s == 0){ if(dp[l][r] != 0) return dp[l][r]; res += rec(rec, l, r, 1); for(int m = l + 1; m < r; m++){ res += rec(rec, l, m, 1) * rec(rec, m, r, 0); } return dp[l][r] = res; } if(dp2[l][r] != 0) return dp2[l][r]; for(int m = l; m < r; m++){ res += rec(rec, l, m, 0) * rec(rec, m + 1, r, 0); } return dp2[l][r] = res; }; cout << rec(rec, 0, n, 0).val() << '\n'; }