結果
| 問題 |
No.2278 Time Bomb Game 2
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-04-21 23:35:34 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,517 bytes |
| コンパイル時間 | 2,122 ms |
| コンパイル使用メモリ | 204,764 KB |
| 最終ジャッジ日時 | 2025-02-12 12:37:57 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 66 WA * 3 MLE * 1 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i,n) for (int i=0;i<(int)(n);i++)
int n;
string s;
vector<int> sl(2e5,-1);
vector<int> sr(2e5,-1);
int dfs(int nk,int nt){
if(nt==0) return 0;
int sz=sr.at(nk)-sl.at(nk);
if(sz<=nt&&sz%2==0) return 1;
if(sz==1){
int enflg=1;
if(nk>0){
if(sr.at(nk-1)-sl.at(nk-1)!=1) enflg=0;
}
if(nk<n-1){
if(sr.at(nk+1)-sl.at(nk+1)!=1) enflg=0;
}
if(enflg&&nt%2==0) return 0;
if(nk>0){
if(!dfs(nk-1,nt-1)) return 1;
}
if(nk<n-1){
if(!dfs(nk+1,nt-1)) return 1;
}
return 0;
}
if(sl.at(nk)!=0){
int df=nt-(nk-sl.at(nk));
if(df>0){
df=(df+1)%2;
if(!dfs(sl.at(nk)-1,df)) return 1;
}
}
if(sr.at(nk)!=n){
int df=nt-(sr.at(nk)-nk-1);
if(df>0){
df=(df+1)%2;
if(!dfs(sr.at(nk),df)) return 1;
}
}
return 0;
}
int main(){
int k,t;
cin>>n>>k>>t;
k--;
string s;
cin>>s;
{
sl.at(0)=0;
rep(i,n-1){
if(s.at(i)==s.at(i+1)){
sl.at(i+1)=sl.at(i);
}else{
sl.at(i+1)=i+1;
}
}
reverse(s.begin(),s.end());
sr.at(0)=n;
rep(i,n-1){
if(s.at(i)==s.at(i+1)){
sr.at(i+1)=sr.at(i);
}else{
sr.at(i+1)=n-i-1;
}
}
reverse(s.begin(),s.end());
reverse(sr.begin(),sr.begin()+n);
}
map<char,string> mp={{'A',"Alice"},{'B',"Bob"}};
char rv='A'^'B'^s.at(k);
if(dfs(k,t)) cout<<mp.at(s.at(k))<<endl;
else cout<<mp.at(rv)<<endl;
}