Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- using namespace std;
- using namespace __gnu_pbds;
- #define int long long
- #define pb push_back
- #define all(s) s.begin(),s.end()
- #define rall(s) s.rbegin(),s.rend()
- #define pii pair<int,int>
- #define fr first
- #define sc second
- #define bst ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- #define endl "\n"
- #define no cout << "NO" << endl;
- #define yes cout << "YES" << endl;
- typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;
- const int N = 5e5 + 10, mod = 1e9 + 7, inf = 1e18 + 7, logn = 23;
- const double pi = acos(-1);
- void solve() {
- //soln
- int n, k;
- cin >> n >> k;
- string s;
- cin >> s;
- bool fine = 1;
- vector<int> pr(3); // 0 1 ?
- for(int i = 0; i < n; i++) {
- if(s[i] == '?') {
- pr[2]++;
- } else {
- pr[s[i] - '0']++;
- }
- fine &= (pr[0] <= k / 2);
- fine &= (pr[1] <= k / 2);
- if(i > k) {
- vector<int> cur = pr;
- if(s[i - k] == '?') {
- cur[2]--;
- } else {
- cur[s[i - k] - '0']--;
- }
- int n1pr = k / 2 - pr[1];
- int n0pr = k / 2 - pr[0];
- int n1cr = k / 2 - cur[1];
- int n0cr = k / 2 - cur[0];
- fine &= (n1pr >= 0);
- fine &= (n1cr >= 0);
- fine &= (n0pr >= 0);
- fine &= (n0cr >= 0);
- if(s[i] != '?' && s[i - k] != '?') {
- fine &= (n1pr == n1cr);
- fine &= (n0pr == n0cr);
- } else {
- fine &= ((n1pr + n0pr) == pr[2]);
- fine &= ((n1cr + n0cr) == pr[2]);
- int midq = cur[2] - (s[i] == '?') - (s[i - k] == '?');
- int tmp = min(n1pr, n1cr);
- midq -= tmp;
- n1pr -= tmp;
- n1cr -= tmp;
- tmp = min(n0pr, n0cr);
- midq -= tmp;
- n0pr -= tmp;
- n0cr -= tmp;
- fine &= (midq != 0);
- fine &= (n1pr >= 0);
- fine &= (n0pr >= 0);
- fine &= (n1cr >= 0);
- fine &= (n0cr >= 0);
- //some ? in edge
- }
- }
- }
- if(fine) {
- yes;
- } else {
- no;
- }
- }
- main() {
- bst;
- int t = 1;
- cin >> t;
- while(t--) {
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement