// #pragma optimize ("g",on)
// #pragma GCC optimize ("inline")
// #pragma GCC optimize ("Ofast")
// #pragma GCC optimize ("unroll-loops")
// #pragma GCC optimize ("03")
#include <bits/stdc++.h>
#define pb push_back
#define SS ios_base::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
#define int long long
#define all(v) v.begin(),v.end()
using namespace std;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int N = 3e5 + 1, inf = 1e15, mod = 998244353;
void solve(){
int l, q;
cin >> l >> q;
string s;
cin >> s;
int n = 1ll << l;
int a[n], dp0[n], dp1[n], t[n];
for(int i = 0; i < n; i++){
a[i] = s[i] - '0';
dp1[i] = a[i];
dp0[n - i - 1] = a[i];
t[i] = (__builtin_popcount(i) % 2 == 0 ? 1 : -1);
}
for(int i = 0; i < l; i++){
for(int mask = 0; mask < n; mask++){
if((mask >> i) & 1){
dp1[mask] += dp1[mask ^ (1ll << i)];
dp0[mask] += dp0[mask ^ (1ll << i)];
}
}
}
while(q--){
string s;
cin >> s;
reverse(all(s));
int c0 = 0, c1 = 0, cs = 0;
int m0 = 0, m1 = 0, ms = 0;
for(int i = 0; i < l; i++){
if(s[i] == '0') c0++, m0 |= (1ll << i);
if(s[i] == '1') c1++, m1 |= (1ll << i);
if(s[i] == '?') cs++, ms |= (1ll << i);
}
int ans = 0;
if(ms <= 6){
for(int m = ms;; m = (m - 1) & ms){
ans += a[m | m1];
if(m == 0) break;
}
}
else if(m1 <= 6){
for(int m = m1;; m = (m - 1) & m1){
ans += dp1[m | ms] * t[m1 ^ m];
if(m == 0) break;
}
}
else{
for(int m = m0;; m = (m - 1) & m0){
ans += dp0[m | ms] * t[m0 ^ m];
if(m == 0) break;
}
}
cout << ans << '\n';
}
}
signed main(){
SS
// freopen("trains.in", "r", stdin);
// freopen("trains.out", "w", stdout);
int t = 1;
// cin >> t;
while(t--){
solve();
}
}
| # | 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... |