Submission #590275

#TimeUsernameProblemLanguageResultExecution timeMemory
590275blueSnake Escaping (JOI18_snake_escaping)C++17
5 / 100
2050 ms18912 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; using vi = vector<int>; #define sz(x) int(x.size()) int main() { int L, Q; cin >> L >> Q; vi A((1<<L)); for(int i = 0; i < (1<<L); i++) { char c; cin >> c; A[i] = c - '0'; } vi lowersum = A; vi uppersum = A; for(int b = 0; b < L; b++) { for(int i = 0; i < (1<<L); i++) { if(i & (1<<b)) lowersum[i] += lowersum[i ^ (1<<b)]; else uppersum[i] += uppersum[i ^ (1<<b)]; } } vi getbit((1<<L)); for(int i = 0; i < L; i++) getbit[(1<<i)] = i; for(int j = 0; j < Q; j++) { vi p0, p1, pq; int onemask = 0; for(int b = L-1; b >= 0; b--) { char c; cin >> c; if(c == '0') p0.push_back(b); else if(c == '1') { p1.push_back(b); onemask += (1<<b); } else pq.push_back(b); } int res = 0; if(sz(pq) <= 10) { vi ssum((1 << sz(pq)), 0); for(int m = 1; m < (1<<sz(pq)); m++) ssum[m] = ssum[m - (m&-m)] + (1 << pq[getbit[m&-m]]); for(int m = 0; m < (1<<sz(pq)); m++) res += A[onemask | ssum[m]]; } // cerr << test << ' ' << mask << '\n'; cout << res << '\n'; } }
#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...