#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define sz(a) (int)((a).size())
#define all(a) (a).begin(), (a).end()
#define uni(a) sort(all(a)), (a).resize(unique(all(a)) - (a).begin())
typedef pair <int, int> ii;
const int N = 5e3 + 10;
int n, q, v[1 << 20];
string s;
ll f[1 << 20], g[1 << 20];
void solve() {
cin >> n >> q >> s;
for (int i = 0; i < (1 << n); i++) {
v[i] = s[i] - '0';
g[((1 << n) - 1) ^ i] = v[i];
f[i] = v[i];
}
for (int i = 0; i < n; i++) {
for (int mask = 0; mask < (1 << n); mask++) {
if (mask & (1 << i)) {
f[mask] += f[mask ^ (1 << i)];
g[mask] += g[mask ^ (1 << i)];
}
}
}
while (q--) {
cin >> s;
int l = 0, r = n - 1;
while (l <= r) {
swap(s[l], s[r]);
l++, r--;
}
int d0 = 0, d1 = 0, d2 = 0, x = 0, y = 0, z = 0;
for (int i = 0; i < n; i++) {
if (s[i] == '0') {
x |= (1 << i);
d0++;
}
if (s[i] == '1') {
y |= (1 << i);
d1++;
}
if (s[i] == '?') {
z |= (1 << i);
d2++;
}
}
if (d2 <= 6) {
ll ans = 0;
for (int mask = z; ; mask = (mask - 1) & z) {
ans += v[mask | y];
if (mask == 0)
break;
}
cout << ans << '\n';
continue;
}
if (d1 <= 6) {
ll ans = 0;
for (int mask = y; ; mask = (mask - 1) & y) {
if (__builtin_popcount(mask ^ y) & 1) ans -= f[mask | z];
else ans += f[mask | z];
if (mask == 0)
break;
}
cout << ans << '\n';
continue;
}
if (d0 <= 6) {
ll ans = 0;
for (int mask = x; ; mask = (mask - 1) & x) {
if (__builtin_popcount(mask ^ x) & 1) ans -= g[mask | z];
else ans += g[mask | z];
if (mask == 0)
break;
}
cout << ans << '\n';
continue;
}
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
// freopen("a.inp", "r", stdin);
// freopen("a.out", "w", stdout);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
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... |