Submission #1177997

#TimeUsernameProblemLanguageResultExecution timeMemory
1177997akamizaneSnake Escaping (JOI18_snake_escaping)C++20
100 / 100
383 ms22020 KiB
#include<bits/stdc++.h> using namespace std; #define debug(...) 42 void solve(){ int l, q; cin >> l >> q; int n = 1 << l; vector<int> val(n), sub(n), sup(n); string s; cin >> s; for (int i = 0; i < n; i++){ val[i] = sub[i] = sup[i] = s[i] - '0'; } debug(val); for (int i = 0; i < l; i++){ for (int mask = 0; mask < (1 << l); mask++){ if (mask >> i & 1) sub[mask] += sub[mask ^ (1 << i)]; else sup[mask] += sup[mask ^ (1 << i)]; } } while(q--){ cin >> s; int one = 0, zero = 0, ask = 0; for (int i = 0; i < l; i++){ if (s[i] == '1') one |= 1 << (l - 1 - i); else if (s[i] == '0') zero |= 1 << (l - 1 - i); else if (s[i] == '?') ask |= 1 << (l - 1 - i); } debug(s, one, zero, ask); int ans = 0; if (__builtin_popcount(ask) <= l / 3){ for (int x = ask; x >= 0; x = (x - 1) & ask){ ans += val[one ^ x]; if (x == 0) break; } } else if (__builtin_popcount(zero) <= l / 3){ for (int x = zero; x >= 0; x = (x - 1) & zero){ if (__builtin_popcount(x) & 1){ ans -= sup[x ^ one]; } else ans += sup[x ^ one]; if (x == 0) break; } } else{ for (int x = one; x >= 0; x = (x - 1) & one){ if (__builtin_popcount(x ^ one) & 1){ ans -= sub[x ^ ask]; } else ans += sub[x ^ ask]; if (x == 0) break; } } cout << ans << "\n"; } } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); int tt = 1; // cin >> tt; while (tt--){ 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...