結果
| 問題 |
No.2278 Time Bomb Game 2
|
| コンテスト | |
| ユーザー |
miscalc
|
| 提出日時 | 2023-04-12 22:59:27 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,243 bytes |
| コンパイル時間 | 1,916 ms |
| コンパイル使用メモリ | 195,300 KB |
| 最終ジャッジ日時 | 2025-02-12 05:26:05 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 35 WA * 35 |
ソースコード
#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;
if (K != N - 1 && 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;
}
miscalc