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
AC × 4
AC × 63
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