This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define all(a) a.begin(), a.end()
typedef long long ll;
typedef pair<int, int> ii;
const int N = 2e5 + 5;
const int mod = 1e9 + 7;
const ll lg = 20;
int f1[(1 << lg) + 5];
int l, q;
string s;
void solve()
{
cin >> l >> q;
cin >> s;
for(int i = 0; i < (1 << l); i++)
f1[i] = s[i] - '0';
for(int bit = 0; bit < l; bit++)
for(int i = 0; i < (1 << l); i++)
if (i >> bit & 1) f1[i ^ (1 << bit)] += f1[i];
while(q--)
{
cin >> s;
int mask0 = 0, mask1 = 0;
for(int i = 0; i < l; i++)
{
if(s[i] == '1')
mask1 |= (1 << (l - 1 - i));
if(s[i] == '0')
mask0 |= (1 << (l - 1 - i));
}
int res = f1[mask1], tmp = mask0;
while(tmp)
{
int mul = (__builtin_popcount(tmp) & 1 ? -1 : 1);
res += mul * f1[tmp + mask1];
tmp = mask0 & (tmp - 1);
}
cout << res << '\n';
}
}
signed main()
{
cin.tie(0)->sync_with_stdio(0);
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... |