제출 #996431

#제출 시각아이디문제언어결과실행 시간메모리
996431yanbSnake Escaping (JOI18_snake_escaping)C++14
12 / 100
2009 ms23816 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<long long, long long> #define t3i tuple<long long, long long, long long> const int MinVop = 10; int calc(vector<int> &tri, int x, int l, string &tox) { if (l == x) { int v = 0; for (int i = 0; i < l; i++) { v *= 2; v += tri[i]; } return tox[v] - '0'; } if (tri[x] == 2) { int ans = 0; tri[x] = 0; ans += calc(tri, x + 1, l, tox); tri[x] = 1; ans += calc(tri, x + 1, l, tox); tri[x] = 2; return ans; } return calc(tri, x + 1, l, tox); } int build(vector<int> &tri, vector<int> &ans, string &tox, int l, int q) { int v = 0, vop = 0; for (int i = 0; i < l; i++) { v *= 3; v += tri[i]; vop += (tri[i] == 2); } if (vop < MinVop) { vector<int> tri_(l); for (int i = 0; i < l; i++) tri_[i] = tri[i]; ans[v] = calc(tri_, 0, l, tox); } if (ans[v] != -1) return ans[v]; for (int i = 0; i < l; i++) { if (tri[i] == 2) { int cans = 0; tri[i] = 0; cans += build(tri, ans, tox, l, q); tri[i] = 1; cans += build(tri, ans, tox, l, q); tri[i] = 2; ans[v] = cans; } } return ans[v]; } signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int l, q; string tox; cin >> l >> q >> tox; vector<int> ans(pow(3, l) + 100, -1); vector<int> tri(l, 2); build(tri, ans, tox, l, q); while (q--) { string s; cin >> s; int v = 0, vop = 0; for (int i = 0; i < l; i++) { v *= 3; v += (s[i] == '?' ? 2 : s[i] - '0'); vop += (s[i] == '?'); } if (vop >= MinVop) { cout << ans[v] << "\n"; } else { vector<int> tri(l); for (int i = 0; i < l; i++) tri[i] = (s[i] == '?' ? 2 : s[i] - '0'); cout << calc(tri, 0, l, tox) << "\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...