平衡的字符串
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
char str[N];
bool vis[N];
int main(){
int n, k;
scanf("%d%d", &n, &k);
scanf("%s", str + 1);
if(k % 2 == 1){
cout << "No" << endl;
return 0;
}
for(int i = 1; i <= k; i ++){
bool one = false, zero = false;
for(int j = i; j <= n; j += k){
if(str[j] == '1')
one = true;
if(str[j] == '0')
zero = true;
}
if(one && zero){
cout << "No" << endl;
return 0;
}
if(one){
for(int j = i; j <= n; j += k)
str[j] = '1';
}else if(zero)
for(int j = i; j <= n; j += k)
str[j] = '0';
}
int cnt2 = 0, cnt0 = 0, cnt1 = 0;
for(int i = 1; i <= k; i ++){
if(str[i] == '0')
cnt0 ++;
if(str[i] == '1')
cnt1 ++;
if(str[i] == '?')
cnt2 ++;
}
if(abs(cnt0 - cnt1) > cnt2){
cout << "No" << endl;
return 0;
}
cout << "Yes" << endl;
return 0;
}