結果
| 問題 | No.2278 Time Bomb Game 2 | 
| コンテスト | |
| ユーザー |  miscalc | 
| 提出日時 | 2023-04-12 23:09:46 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,175 bytes | 
| コンパイル時間 | 1,814 ms | 
| コンパイル使用メモリ | 194,544 KB | 
| 最終ジャッジ日時 | 2025-02-12 05:27:16 | 
| ジャッジサーバーID (参考情報) | judge3 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 33 WA * 37 | 
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
// Alice なら true, Bob なら false
bool solve(int N, int K, int T, string S)
{
  // Alice 視点にする
  if (S.at(K) == 'B')
  {
    for (int i = 0; i < N; i++)
    {
      S.at(i) = S.at(i) == 'A' ? 'B' : 'A';
    }
    return !solve(N, K, T, S);
  }
  if ((K != 0 && S.at(K - 1) == 'A') || (K != N - 1 && S.at(K + 1) == 'A'))
  {
    int l = -1, r = -1; // 左右それぞれで初めて出現する 'B' の位置
    for (int i = K - 1; i >= 0; i--)
    {
      if (S.at(i) == 'B')
      {
        l = i;
        break;
      }
    }
    for (int i = K + 1; i < N; i++)
    {
      if (S.at(i) == 'B')
      {
        r = i;
        break;
      }
    }
    if (l != -1 && K - l <= T && (K - l) % 2 == T % 2)
      return true;
    if (r != -1 && r - K <= T && (r - K) % 2 == T % 2)
      return true;
    return false;
  }
  else
  {
    if (T % 2 == 0)
      return true;
    if (K != 0 && solve(N, K - 1, T - 1, S))
      return true;
    return false;
  }
}
int main()
{
  int N, K, T;
  string S;
  cin >> N >> K >> T >> S;
  K--;
  cout << (solve(N, K, T, S) ? "Alice" : "Bob") << endl;
}
            
            
            
        