#include <bits/stdc++.h>
using namespace std;
#define pop(x) __builtin_popcount(x)
const int MXL = 20;
int L, Q, sub[1<<MXL], sup[1<<MXL];
string s, t;
int32_t main() {
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
cin >> L >> Q >> s;
for(int i=0; i<(1<<L); i++)
sub[i] = sup[i] = s[i]-'0';
for(int i=0; i<L; i++)
for(int j=0; j<(1<<L); j++)
if(j>>i&1) sub[j] += sub[j^(1<<i)];
else sup[j] += sup[j^(1<<i)];
while(Q--) {
cin >> t;
int msk0=0, msk1=0, msk2=0, ans=0;
for(int i=0; i<L; i++)
if(t[i]=='0') msk0 ^= 1<<(L-1-i);
else if(t[i]=='1') msk1 ^= 1<<(L-1-i);
else msk2 ^= 1<<(L-1-i);
if(pop(msk0)<=L/3)
for(int i=msk0; ; i = (i-1)&msk0) {
ans += sup[i^msk1]*((pop(i)&1) ? -1 : 1);
if(!i) break;
}
else if(pop(msk1)<=L/3)
for(int i=msk1; ; i = (i-1)&msk1) {
ans += sub[i^msk2]*(((pop(msk1)-pop(i))&1) ? -1 : 1);
if(!i) break;
}
else
for(int i=msk2; ; i = (i-1)&msk2) {
ans += s[i^msk1]-'0';
if(!i) break;
}
cout << ans << '\n';
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |