#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const ll N = 1e6 + 5;
const ll mod = 1e9 + 7;
const ll inf = LLONG_MAX/5;
#define bit(x,y) ((x >> y) & 1)
ll a[N],f0[N],f1[N];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
ll n,q;
cin >> n >> q;
ll i,j;
for(i = 0;i < (1 << n);i++)
{
char tmp;
cin >> tmp;
tmp -= '0';
a[i] = tmp;
}
//1
for(i = 0;i < (1 << n);i++) f0[i] = f1[i] = a[i];
for(i = 0;i < n;i++)
{
for(j = 0;j < (1 << n);j++)
{
if(bit(j,i)) f1[j] += f1[j ^ (1 << i)];
}
}
//0
for(i = 0;i < n;i++)
{
for(j = 0;j < (1 << n);j++)
{
if(!bit(j,i)) f0[j] += f0[j ^ (1 << i)];
}
}
while(q--)
{
ll c0 = 0,c1 = 0,c = 0;
string tmp;
cin >> tmp;
for(i = 0;i < tmp.size();i++)
{
if(tmp[i] == '0') c0++;
if(tmp[i] == '1') c1++;
if(tmp[i] == '?') c++;
}
if(c1 <= 6)
{
vector<ll> haha;
ll m = 0;
for(i = tmp.size() - 1;i >= 0;i--)
{
if(tmp[i] == '1') haha.push_back(tmp.size() - 1 - i);
if(tmp[i] == '?') m = m | (1 << (tmp.size() - 1 - i));
}
ll ans = 0;
for(i = 0;i < (1 << haha.size());i++)
{
ll tm = 0;
ll lost = 0;
for(j = 0;j < haha.size();j++)
{
if(bit(i,j)) tm |= (1 << haha[j]);
else lost++;
}
tm |= m;
if(lost % 2 == 0) ans += f1[tm];
else ans -= f1[tm];
}
cout << ans << "\n";
}else
{
if(c0 <= 6)
{
vector<ll> haha;
ll m = (1 << n) - 1;
for(i = tmp.size() - 1;i >= 0;i--)
{
if(tmp[i] == '0') haha.push_back(tmp.size() - 1 - i);
if(tmp[i] == '?') m ^= (1 << (tmp.size() - 1 - i));
}
ll ans = 0;
for(i = 0;i < (1 << haha.size());i++)
{
ll tm = (1 << n) - 1;
ll lost = 0;
for(j = 0;j < haha.size();j++)
{
if(bit(i,j)) tm ^= (1 << haha[j]);
else lost++;
}
tm &= m;
if(lost % 2 == 0) ans += f0[tm];
else ans -= f0[tm];
}
cout << ans << "\n";
}else
{
vector<ll> haha;
ll m = 0;
for(i = tmp.size() - 1;i >= 0;i--)
{
if(tmp[i] == '?') haha.push_back(tmp.size() - 1 - i);
else m |= (tmp[i] - '0') << (tmp.size() - 1 - i );
}
ll ans = 0;
for(i = 0;i < (1 << haha.size());i++)
{
ll tm = 0;
for(j = 0;j < haha.size();j++)
{
if(bit(i,j)) tm |= (1 << haha[j]);
}
tm |= m;
ans += a[tm];
}
cout << ans << "\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... |