Submission #679898

#TimeUsernameProblemLanguageResultExecution timeMemory
679898vjudge1Snake Escaping (JOI18_snake_escaping)C++14
22 / 100
2077 ms19972 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...