func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 2e5 + 5;   const long long mod = 998244353;   int mp[maxn], a[maxn];   char s[maxn];   int main() {     int T;     scanf( %d , &T);     while (T--) {       int n, x;       scanf( %d , &n);       scanf( %d , &x);       scanf( %s , s + 1);       int mn = 1e9, mx = -1e9;       for (int i = (1); i <= (n); i++) {         if (s[i] ==  0 )           a[i] = a[i - 1] + 1;         else           a[i] = a[i - 1] - 1;         mx = max(mx, a[i]), mn = min(mn, a[i]);       }       for (int i = (0); i <= (mx - mn); i++) mp[i] = 0;       for (int i = (1); i <= (n); i++) mp[a[i] - mn]++;       if (a[n] == 0) {         if (x < mn || x > mx || mp[x - mn] == 0) {           if (x != 0)             puts( 0 );           else             puts( 1 );         } else           puts( -1 );         continue;       }       if (a[n] > 0) {         int l = 0, r = 1e9, pos = -1;         while (l <= r) {           int mid = l + r >> 1;           if (x >= 1ll * mid * a[n] + mn && x <= 1ll * mid * a[n] + mx)             pos = mid, r = mid - 1;           else if (x < 1ll * mid * a[n] + mn)             r = mid - 1;           else             l = mid + 1;         }         long long ans = 0;         if (pos == -1)           ans = 0;         else {           int mpx = -1;           for (int i = pos * a[n] + mn; i <= pos * a[n] + mx; i++) {             if (i <= x)               mpx++;             else               break;           }           for (int i = mpx; i >= 0; i -= a[n]) ans += mp[i];         }         if (x == 0) ans++;         printf( %lld , ans);         puts(  );       } else {         int l = 0, r = 1e9, pos = -1;         while (l <= r) {           int mid = l + r >> 1;           if (x >= 1ll * mid * a[n] + mn && x <= 1ll * mid * a[n] + mx)             pos = mid, r = mid - 1;           else if (x < 1ll * mid * a[n] + mn)             l = mid + 1;           else             r = mid - 1;         }         long long ans = 0;         if (pos == -1)           ans = 0;         else {           int mpx = -1;           for (int i = pos * a[n] + mn; i <= pos * a[n] + mx; i++) {             if (i <= x)               mpx++;             else               break;           }           for (int i = mpx; i <= mx - mn; i += (-a[n])) ans += mp[i];         }         if (x == 0) ans++;         printf( %lld , ans);         puts(  );       }     }   }   