Submission #1304251

#TimeUsernameProblemLanguageResultExecution timeMemory
1304251KietJSnake Escaping (JOI18_snake_escaping)C++17
100 / 100
402 ms30136 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define sz(a) (int)((a).size()) #define all(a) (a).begin(), (a).end() #define uni(a) sort(all(a)), (a).resize(unique(all(a)) - (a).begin()) typedef pair <int, int> ii; const int N = 5e3 + 10; int n, q, v[1 << 20]; string s; ll f[1 << 20], g[1 << 20]; void solve() { cin >> n >> q >> s; for (int i = 0; i < (1 << n); i++) { v[i] = s[i] - '0'; g[((1 << n) - 1) ^ i] = v[i]; f[i] = v[i]; } for (int i = 0; i < n; i++) { for (int mask = 0; mask < (1 << n); mask++) { if (mask & (1 << i)) { f[mask] += f[mask ^ (1 << i)]; g[mask] += g[mask ^ (1 << i)]; } } } while (q--) { cin >> s; int l = 0, r = n - 1; while (l <= r) { swap(s[l], s[r]); l++, r--; } int d0 = 0, d1 = 0, d2 = 0, x = 0, y = 0, z = 0; for (int i = 0; i < n; i++) { if (s[i] == '0') { x |= (1 << i); d0++; } if (s[i] == '1') { y |= (1 << i); d1++; } if (s[i] == '?') { z |= (1 << i); d2++; } } if (d2 <= 6) { ll ans = 0; for (int mask = z; ; mask = (mask - 1) & z) { ans += v[mask | y]; if (mask == 0) break; } cout << ans << '\n'; continue; } if (d1 <= 6) { ll ans = 0; for (int mask = y; ; mask = (mask - 1) & y) { if (__builtin_popcount(mask ^ y) & 1) ans -= f[mask | z]; else ans += f[mask | z]; if (mask == 0) break; } cout << ans << '\n'; continue; } if (d0 <= 6) { ll ans = 0; for (int mask = x; ; mask = (mask - 1) & x) { if (__builtin_popcount(mask ^ x) & 1) ans -= g[mask | z]; else ans += g[mask | z]; if (mask == 0) break; } cout << ans << '\n'; continue; } } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen("a.inp", "r", stdin); // freopen("a.out", "w", stdout); 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...