Submission #679898

#TimeUsernameProblemLanguageResultExecution timeMemory
679898vjudge1Snake Escaping (JOI18_snake_escaping)C++14
22 / 100
2077 ms19972 KiB
#include <bits/stdc++.h> using namespace std; #define F first #define S second #define pb push_back #define all(a) a.begin(), a.end() typedef long long ll; typedef pair<int, int> ii; const int N = 2e5 + 5; const int mod = 1e9 + 7; const ll lg = 20; int f1[(1 << lg) + 5]; int l, q; string s; void solve() { cin >> l >> q; cin >> s; for(int i = 0; i < (1 << l); i++) f1[i] = s[i] - '0'; for(int bit = 0; bit < l; bit++) for(int i = 0; i < (1 << l); i++) if (i >> bit & 1) f1[i ^ (1 << bit)] += f1[i]; while(q--) { cin >> s; int mask0 = 0, mask1 = 0; for(int i = 0; i < l; i++) { if(s[i] == '1') mask1 |= (1 << (l - 1 - i)); if(s[i] == '0') mask0 |= (1 << (l - 1 - i)); } int res = f1[mask1], tmp = mask0; while(tmp) { int mul = (__builtin_popcount(tmp) & 1 ? -1 : 1); res += mul * f1[tmp + mask1]; tmp = mask0 & (tmp - 1); } cout << res << '\n'; } } signed main() { cin.tie(0)->sync_with_stdio(0); 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...