結果
| 問題 |
No.2278 Time Bomb Game 2
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-04-21 23:07:17 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,713 bytes |
| コンパイル時間 | 1,929 ms |
| コンパイル使用メモリ | 178,484 KB |
| 実行使用メモリ | 70,768 KB |
| 最終ジャッジ日時 | 2024-11-06 16:33:13 |
| 合計ジャッジ時間 | 10,687 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 WA * 12 RE * 28 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n, k, t, mn = 1 << 30;
string s, s2;
cin >> n >> k >> t >> s;
k--;
for(int i = k; i + 1 < n; i++){
if(s[i] != s[i + 1]){
mn = min(mn, i + 1 - k);
break;
}
}
for(int i = k; i >= 1; i--){
if(s[i] != s[i - 1]){
mn = min(mn, k - (i - 1));
break;
}
}
if(mn > t){
cout << (s[k] == 'A' ? "Bob" : "Alice") << '\n';
return 0;
}
char tmp = s[k];
s[k] = 'C';
vector<pair<char,int>> b;
for(int i = 0; i < n; ){
int p = i;
while(i < n && s[i] == s[p]) i++;
b.emplace_back(s[p], i - p);
}
for(int i = 0; i < b.size(); i++){
char c;
int v;
tie(c, v) = b[i];
if(c == 'C'){
k = s2.size();
s2 += tmp;
continue;
}
s2 += string(v % 2 + (v >= 2) * 2, c);
}
swap(s, s2);
n = s.size();
vector<vector<int>> dp(n, vector<int>(101, -1));
function<int(int,int)> rec = [&](int i, int t){
if(t == 0) return s[i] == 'A' ? 0 : 1;
if(dp[i][t] != -1) return dp[i][t];
if(s[i] == 'A'){
if(i >= 1 && rec(i - 1, t - 1) == 1) return dp[i][t] = 1;
if(i + 1 < n && rec(i + 1, t - 1) == 1) return dp[i][t] = 1;
return dp[i][t] = 0;
}
if(i >= 1 && rec(i - 1, t - 1) == 0) return dp[i][t] = 0;
if(i + 1 < n && rec(i + 1, t - 1) == 0) return dp[i][t] = 0;
return dp[i][t] = 1;
};
cout << (rec(k, t) ? "Alice" : "Bob") << '\n';
}