C题解 |根据连续0或1进行分段,分别枚举1,2,3,4段的情况。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
void my_ans(){
int i,j,n,k;
cin>>n>>k;
string str;
string ans;
cin>>str;
vector<int> vc;
i=0;
while(i<n){
j=i;
while(j<n &&str[j] == str[i]) ++j;
vc.push_back(j-i);
i=j;
}
if (vc.size() ==1){
if (vc[0]<=k) ans = "Alice";
else ans = "Bob";
}else if (vc.size() ==2){
if (vc[0] <= k || vc[1]<=k) ans = "Alice";
else if (vc[0]>2 || vc[1]>2) ans = ":(";
else ans = "Bob";
}else if (vc.size()==3){
if (vc[1]<=k) ans = "Alice";
else if (vc[1]>2)ans = ":(";
else ans = "Bob";
}else if (vc.size() ==4 && n==4){
ans = "Bob";
}else {
ans = ":(";
}
cout<<ans<<endl;
return;
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t=1,i,j;
//cin>>t;
while(t>0){
--t;my_ans();
}
return 0;
}
// 64 位输出请用 printf("%lld")