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")