Submission #64376825
Source Code Expand
#ifndef BZ #pragma GCC optimize "-O3" #endif #include <algorithm> #include <bitset> #include <cassert> #include <cmath> #include <cstdlib> #include <cstring> #include <deque> #include <functional> #include <iostream> #include <list> #include <map> #include <numeric> #include <queue> #include <set> #include <sstream> #include <string> #include <unordered_map> #include <unordered_set> #include <vector> #define ALL(v) (v).begin(), (v).end() #define rep(i, l, r) for (int i = (l); i < (r); ++i) using ll = long long; using ld = long double; using ull = unsigned long long; using namespace std; const ll MOD = 998244353; ll pw(ll a, ll b) { ll ans = 1; while (b) { while (!(b & 1)) b >>= 1, a = (a * a) % MOD; ans = (ans * a) % MOD, --b; } return ans; } const int N = 2e7 + 100; ll fc[N]; ll iv[N]; void init() { fc[0] = 1; for (int i = 1; i < N; ++i) { fc[i] = fc[i - 1] * i % MOD; } iv[N - 1] = pw(fc[N - 1], MOD - 2); for (int i = N - 2; i >= 0; --i) { iv[i] = iv[i + 1] * (i + 1) % MOD; } } ll cnk(int n, int k) { if (k > n) { return 0; } return fc[n] * iv[k] % MOD * iv[n - k] % MOD; } ll solve(int x, int y) { if (x < 0) { return 0; } return cnk(x + y - 1, y - 1); } int main() { ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0); cout.setf(ios::fixed), cout.precision(20); init(); int n, k; string s; cin >> n >> k; cin >> s; int cnt = 0; int cur = 0; while (cur < s.size() && s[cur] == '(' && s[cur + 1] == ')') { cnt += 2; cur += 2; } if (cur == s.size()) { ll ans = 0; ll m = 1; for (int i = 0; i <= n - k; ++i, m = m * 2 % MOD) { ans = (ans + solve(n - k - i, cnt) * m) % MOD; } cout << ans << endl; } else { // starting ))) ++cnt; // middle ((( ++cnt; // ending )))) ++cnt; int b = 0; ++cur; ++b; while (b != 0) { if (s[cur] == '(') { ++b; } else { --b; } ++cur; } int blocks = 0; while (cur != s.size()) { b = 1; ++cur; while (b != 0) { if (s[cur] == '(') { ++b; } else { --b; } ++cur; } ++blocks; } // ending ((( ++cnt; ll ans = 0; for (int i = 0; i < blocks; ++i) { ans = (ans + solve(n - k - 1, cnt + blocks)) % MOD; } ans = (ans + solve(n - k, cnt + blocks)) % MOD; cout << ans << endl; } return 0; }
Submission Info
Submission Time | |
---|---|
Task | B - Maximum Bracket Subsequence |
User | LHiC |
Language | C++ 20 (gcc 12.2) |
Score | 900 |
Code Size | 2612 Byte |
Status | AC |
Exec Time | 303 ms |
Memory | 316332 KiB |
Compile Error
Main.cpp: In function ‘int main()’: Main.cpp:84:14: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare] 84 | while (cur < s.size() && s[cur] == '(' && s[cur + 1] == ')') { | ~~~~^~~~~~~~~~ Main.cpp:88:11: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare] 88 | if (cur == s.size()) { | ~~~~^~~~~~~~~~~ Main.cpp:115:16: warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare] 115 | while (cur != s.size()) { | ~~~~^~~~~~~~~~~
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 900 / 900 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt |
All | 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_random_case_01.txt, 01_random_case_02.txt, 01_random_case_03.txt, 01_random_case_04.txt, 01_random_case_05.txt, 01_random_case_06.txt, 01_random_case_07.txt, 01_random_case_08.txt, 01_random_case_09.txt, 01_random_case_10.txt, 01_random_case_11.txt, 01_random_case_12.txt, 01_random_case_13.txt, 01_random_case_14.txt, 01_random_case_15.txt, 01_random_case_16.txt, 02_simple_case_01.txt, 02_simple_case_02.txt, 02_simple_case_03.txt, 02_simple_case_04.txt, 02_simple_case_05.txt, 02_simple_case_06.txt, 02_simple_case_07.txt, 02_simple_case_08.txt, 02_simple_case_09.txt, 02_simple_case_10.txt, 02_simple_case_11.txt, 02_simple_case_12.txt, 03_max_case_01.txt, 03_max_case_02.txt, 03_max_case_03.txt, 03_max_case_04.txt, 03_max_case_05.txt, 03_max_case_06.txt, 03_max_case_07.txt, 03_max_case_08.txt, 03_max_case_09.txt, 03_max_case_10.txt, 03_max_case_11.txt, 03_max_case_12.txt, 03_max_case_13.txt, 03_max_case_14.txt, 03_max_case_15.txt, 03_max_case_16.txt, 03_max_case_17.txt, 03_max_case_18.txt, 03_max_case_19.txt, 03_max_case_20.txt, 04_corner_01.txt, 04_corner_02.txt, 04_corner_03.txt, 04_corner_04.txt, 04_corner_05.txt, 04_corner_06.txt, 05_handmade_01.txt, 05_handmade_02.txt, 05_handmade_03.txt, 05_handmade_04.txt, 05_handmade_05.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_01.txt | AC | 260 ms | 316120 KiB |
00_sample_02.txt | AC | 261 ms | 316044 KiB |
00_sample_03.txt | AC | 264 ms | 315924 KiB |
00_sample_04.txt | AC | 261 ms | 315996 KiB |
01_random_case_01.txt | AC | 261 ms | 316092 KiB |
01_random_case_02.txt | AC | 261 ms | 316216 KiB |
01_random_case_03.txt | AC | 261 ms | 315976 KiB |
01_random_case_04.txt | AC | 262 ms | 316100 KiB |
01_random_case_05.txt | AC | 261 ms | 316244 KiB |
01_random_case_06.txt | AC | 261 ms | 316248 KiB |
01_random_case_07.txt | AC | 261 ms | 316240 KiB |
01_random_case_08.txt | AC | 261 ms | 316276 KiB |
01_random_case_09.txt | AC | 261 ms | 316268 KiB |
01_random_case_10.txt | AC | 261 ms | 316204 KiB |
01_random_case_11.txt | AC | 261 ms | 316192 KiB |
01_random_case_12.txt | AC | 261 ms | 316184 KiB |
01_random_case_13.txt | AC | 263 ms | 316148 KiB |
01_random_case_14.txt | AC | 263 ms | 316148 KiB |
01_random_case_15.txt | AC | 262 ms | 316280 KiB |
01_random_case_16.txt | AC | 262 ms | 316332 KiB |
02_simple_case_01.txt | AC | 261 ms | 316112 KiB |
02_simple_case_02.txt | AC | 262 ms | 316284 KiB |
02_simple_case_03.txt | AC | 261 ms | 316100 KiB |
02_simple_case_04.txt | AC | 263 ms | 316200 KiB |
02_simple_case_05.txt | AC | 261 ms | 316200 KiB |
02_simple_case_06.txt | AC | 261 ms | 316188 KiB |
02_simple_case_07.txt | AC | 261 ms | 316256 KiB |
02_simple_case_08.txt | AC | 261 ms | 316184 KiB |
02_simple_case_09.txt | AC | 262 ms | 316220 KiB |
02_simple_case_10.txt | AC | 261 ms | 316208 KiB |
02_simple_case_11.txt | AC | 262 ms | 316268 KiB |
02_simple_case_12.txt | AC | 261 ms | 316144 KiB |
03_max_case_01.txt | AC | 262 ms | 316276 KiB |
03_max_case_02.txt | AC | 261 ms | 316220 KiB |
03_max_case_03.txt | AC | 261 ms | 316148 KiB |
03_max_case_04.txt | AC | 263 ms | 316176 KiB |
03_max_case_05.txt | AC | 261 ms | 316304 KiB |
03_max_case_06.txt | AC | 261 ms | 316100 KiB |
03_max_case_07.txt | AC | 260 ms | 316224 KiB |
03_max_case_08.txt | AC | 261 ms | 316232 KiB |
03_max_case_09.txt | AC | 261 ms | 316220 KiB |
03_max_case_10.txt | AC | 262 ms | 316300 KiB |
03_max_case_11.txt | AC | 261 ms | 316284 KiB |
03_max_case_12.txt | AC | 260 ms | 316328 KiB |
03_max_case_13.txt | AC | 262 ms | 316204 KiB |
03_max_case_14.txt | AC | 262 ms | 316096 KiB |
03_max_case_15.txt | AC | 262 ms | 316244 KiB |
03_max_case_16.txt | AC | 261 ms | 316220 KiB |
03_max_case_17.txt | AC | 262 ms | 316220 KiB |
03_max_case_18.txt | AC | 261 ms | 316240 KiB |
03_max_case_19.txt | AC | 263 ms | 316204 KiB |
03_max_case_20.txt | AC | 262 ms | 316240 KiB |
04_corner_01.txt | AC | 299 ms | 316096 KiB |
04_corner_02.txt | AC | 303 ms | 316032 KiB |
04_corner_03.txt | AC | 273 ms | 316220 KiB |
04_corner_04.txt | AC | 301 ms | 316248 KiB |
04_corner_05.txt | AC | 272 ms | 316048 KiB |
04_corner_06.txt | AC | 265 ms | 316096 KiB |
05_handmade_01.txt | AC | 262 ms | 315968 KiB |
05_handmade_02.txt | AC | 260 ms | 315892 KiB |
05_handmade_03.txt | AC | 260 ms | 316052 KiB |
05_handmade_04.txt | AC | 303 ms | 316208 KiB |
05_handmade_05.txt | AC | 262 ms | 316236 KiB |