#include <bits/stdc++.h>
//qwerty47924692
using namespace std;
using ll = long long;
const ll N=(1ll<<20);
const string br="617283";
#define sz(a)(ll)a.size()
#define f first
#define s second
ll l,q,dp[N];
string s;
ll calc(ll x){
return dp[x];
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>l>>q>>s;
ll n=(1ll<<l);
for(ll i=0;i<n;i++)dp[i]=(s[i]-'0');
for(ll i=0;i<l;i++){
for(ll mask=0;mask<n;mask++){
if((mask>>i)&1){
dp[mask]+=dp[mask-(1ll<<i)];
}
}
}
// cout<<dp[0]<<'\n';
while(q--){
string a;
cin>>a;
ll x=0;
reverse(a.begin(),a.end());
ll must=0;
for(ll i=0;i<a.size();i++){
if(a[i]=='?')x|=(1ll<<i);
if(a[i]=='1')must|=(1ll<<i);
}ll sum=0;
// cout<<must<<' '<<x<<'\n';
for(ll mask=must;mask>=0;mask=((mask-1)&must)){
sum+=calc(mask+x)*(__builtin_popcount(mask)&1 ? 1 : -1);
if(mask==0)break;
}
cout<<abs(sum)<<'\n';
}
}
# | 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... |