平衡的字符串(思维)

平衡的字符串

#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; 
}
原文地址:https://www.cnblogs.com/pureayu/p/14826868.html