Submission #1231642

#TimeUsernameProblemLanguageResultExecution timeMemory
1231642duyngadoctonSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
1235 ms21844 KiB
#include<bits/stdc++.h> using namespace std; const int MAX = (int) 2e6; #define pb push_back int l, q; string s; int a[MAX + 5]; int f[1 << 21], g[1 << 21]; int main() { ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> l >> q; cin >> s; for(int i = 0; i < (1 << l); ++i) a[i] = s[i] - '0'; for(int i = 0; i < (1 << l); ++i) f[i] = a[i]; for(int i = 1; i <= l; ++i) for(int mask = 0; mask < (1 << l); ++mask) if(mask >> (i - 1) & 1) f[mask] += f[mask ^ (1 << (i - 1))]; for(int i = 0; i < (1 << l); ++i) g[(1 << l) - i - 1] = a[i]; for(int i = 1; i <= l; ++i) for(int mask = 0; mask < (1 << l); ++mask) if(mask >> (i - 1) & 1) g[mask] += g[mask ^ (1 << (i - 1))]; reverse(g, g + (1 << l)); while(q--) { string t; cin >> t; vector<int> v0, v1, v2; int cur = 0; int cur2 = 0; for(int i = l - 1; i >= 0; --i) if(t[i] == '0') v0.pb((1 << (l - i - 1))); else if(t[i] == '1') v1.pb(1 << (l - i - 1)), cur += (1 << (l - i - 1)); else v2.pb((1 << (l - i - 1))), cur2 += 1 << (l - i - 1); cur2 += cur; int ds = 0; if(v0.size() <= 6) { int m = v0.size(); for(int mask = 0; mask < (1 << m); ++mask) { int hs = 1; if(__builtin_popcount(mask) % 2) hs = -1; int A = 0; for(int i = 0; i < m; ++i) if(mask >> i & 1) { A += v0[i]; } ds += hs * g[cur + A]; } cout << ds << "\n"; } else if(v1.size() <= 6) { int m = v1.size(); for(int mask = 0; mask < (1 << m); ++mask) { int hs = 1; if(__builtin_popcount(mask) % 2) hs = -1; int A = 0; for(int i = 0; i < m; ++i) if(mask >> i & 1) { A += v1[i]; } ds += hs * f[cur2 - A]; } cout << ds << "\n"; } else { int m = v2.size(); for(int mask = 0; mask < (1 << m); ++mask) { int A = 0; for(int i = 0; i < m; ++i) if(mask >> i & 1) A += v2[i]; ds += a[A + cur]; } cout << ds << "\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...