提出 #70830158


ソースコード 拡げる

/* GLORY TO HANUMAN */
#include <bits/stdc++.h>
using namespace std;

#define int long long
#ifndef ONLINE_JUDGE
#include "debug.h"
#define deb(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define deb(x...)
#endif

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

template<class T>
void output (vector<T> &a) {for (auto &x : a) {cout << x << ' ';}cout << '\n';}


/*        

     if string is not a valid bracket sequence First wins
     
     if string i a valid bracket sequence :
          if k is odd :
               First wins..
          if k is even :

               first guy in his turn will always be able to make the
               sequence invalid. 

*/

const int INF = 1E9;

bool solve() {
     string s;
     cin >> s;
     int k;
     cin >> k;
     const int n = (int) s.size();
     {
          int bal = 0;
          for (int i = 0; i < n; ++i) {
               bal += s[i] == '(' ? +1 : -1;
               if (bal < 0) {
                    return true;
               }
          }
          if (bal != 0 || k % 2) {
               return true;
          }
     }
     vector<int> prv(n, -1);
     {
          stack<int> stk;
          for (int i = 0; i < n; ++i) {
               if (s[i] == '(') {
                    stk.push(i);
               }
               else {
                    assert(!stk.empty());
                    prv[i] = stk.top();
                    stk.pop();
               }
          }
     }
     vector<int> nxt(n, -1);
     {
          stack<int> stk;
          for (int i = n - 1; i >= 0; --i) {
               if (s[i] == ')') {
                    stk.push(i);
               }
               else {
                    assert(!stk.empty());
                    nxt[i] = stk.top();
                    stk.pop();
               }
          }
     }
     {
          int i = 0, j = n - 1;
          while (j - i > k) {
               if (nxt[i] == i + 1) {
                    i = nxt[i] + 1;
               }
               else if (nxt[i] == j) {
                    i++, j--;
               }
               else {
                    return true;
               }
          }
     }
     {
          int i = 0, j = n - 1;
          while (j - i > k) {
               if (prv[j] == j - 1) {
                    j = prv[j] - 1;
               }
               else if (prv[j] == i) {
                    i++, j--;
               }
               else {
                    return true;
               }
          }
     }
     return false;
}    


int32_t main() {
     ios::sync_with_stdio(false);
     cin.tie(nullptr);

     #ifndef ONLINE_JUDGE
          freopen("input.txt", "r", stdin);
          freopen("output.txt", "w", stdout);
          freopen("error.txt", "w", stderr);
     #endif

     int t = 1;
     cin >> t;
     
     for (int cases = 1; cases <= t; ++cases) {
          cout << (solve() ? "First" : "Second") << "\n";
     }

     #ifndef ONLINE_JUDGE
          double T = 1000.0 * clock() / CLOCKS_PER_SEC;
          cout << "\n[Finished in " << T << "ms]";
          cerr << "\n[Finished in " << T << "ms]";
     #endif

     return 0;
}

提出情報

提出日時
問題 A - Bracket Game
ユーザ Gokuu007
言語 C++23 (GCC 15.2.0)
得点 700
コード長 3285 Byte
結果 AC
実行時間 17 ms
メモリ 23896 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 1
AC × 46
セット名 テストケース
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3552 KiB
01_test_00.txt AC 4 ms 3696 KiB
01_test_01.txt AC 12 ms 3592 KiB
01_test_02.txt AC 11 ms 3652 KiB
01_test_03.txt AC 11 ms 3504 KiB
01_test_04.txt AC 11 ms 3596 KiB
01_test_05.txt AC 11 ms 3596 KiB
01_test_06.txt AC 11 ms 3724 KiB
01_test_07.txt AC 10 ms 3524 KiB
01_test_08.txt AC 11 ms 3552 KiB
01_test_09.txt AC 4 ms 3568 KiB
01_test_10.txt AC 1 ms 3808 KiB
01_test_11.txt AC 7 ms 4920 KiB
01_test_12.txt AC 14 ms 23896 KiB
01_test_13.txt AC 12 ms 21948 KiB
01_test_14.txt AC 12 ms 22076 KiB
01_test_15.txt AC 3 ms 4400 KiB
01_test_16.txt AC 15 ms 22024 KiB
01_test_17.txt AC 3 ms 4408 KiB
01_test_18.txt AC 14 ms 22056 KiB
01_test_19.txt AC 3 ms 4392 KiB
01_test_20.txt AC 17 ms 22044 KiB
01_test_21.txt AC 3 ms 4416 KiB
01_test_22.txt AC 12 ms 22076 KiB
01_test_23.txt AC 3 ms 4464 KiB
01_test_24.txt AC 13 ms 22128 KiB
01_test_25.txt AC 3 ms 4416 KiB
01_test_26.txt AC 13 ms 22092 KiB
01_test_27.txt AC 3 ms 4392 KiB
01_test_28.txt AC 16 ms 21972 KiB
01_test_29.txt AC 3 ms 4308 KiB
01_test_30.txt AC 16 ms 22252 KiB
01_test_31.txt AC 3 ms 4436 KiB
01_test_32.txt AC 16 ms 21996 KiB
01_test_33.txt AC 3 ms 4332 KiB
01_test_34.txt AC 15 ms 22112 KiB
01_test_35.txt AC 3 ms 4392 KiB
01_test_36.txt AC 15 ms 22084 KiB
01_test_37.txt AC 3 ms 4396 KiB
01_test_38.txt AC 16 ms 22108 KiB
01_test_39.txt AC 3 ms 4464 KiB
01_test_40.txt AC 14 ms 22116 KiB
01_test_41.txt AC 3 ms 4412 KiB
01_test_42.txt AC 14 ms 22196 KiB
01_test_43.txt AC 3 ms 4400 KiB
01_test_44.txt AC 14 ms 22060 KiB