Submission #1304008

#TimeUsernameProblemLanguageResultExecution timeMemory
1304008tranthanh506Snake Escaping (JOI18_snake_escaping)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
using namespace std;

#define For(i, a, b, x) for (int i = (a); i <= (b); i += (x))
#define Ford(i, a, b, x) for (int i = (a); i >= (b); i -= (x))

typedef pair<int, int> pii;

long long n, q, a[(1 << 20) + 5], dp[(1 << 20) + 5], save, cnt, ans;
string s;
char x;
bitset<215> mask(1);

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

//    freopen("voi.inp", "r", stdin);
//    freopen("voi.out", "w", stdout);

    cin >> n >> q;
    For(i, 0, (1 << n) - 1, 1){
        cin >> x;
        dp[i] = x - '0';
    }

    For(i, 1, q, 1){
        cin >> s;
        cnt = 0; save = 0; ans = 0;
        mask.reset();
        mask.set(0);
        Ford(c, s.size() - 1, 0, 1){
            if (s[c] == '1') save += (1 << cnt++);
            else if (s[c] == '?') mask |= (mask << (1 << cnt++));
            else cnt++;
        }
        For(j, 0, 210, 1) if (mask[j]) ans += dp[save + j];
        cout << ans << '\n';
    }

    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...