Submission #720051

#TimeUsernameProblemLanguageResultExecution timeMemory
720051dozerSnake Escaping (JOI18_snake_escaping)C++14
75 / 100
2056 ms46744 KiB
#include <bits/stdc++.h> using namespace std; #define sp " " #define endl "\n"; #define fastio() cin.tie(0), ios_base::sync_with_stdio(0) #define pb push_back #define pii pair<int, int> #define st first #define nd second #define N 20000005 //#define int long long const int modulo = 1e9 + 7; int arr[N], ans[N]; int32_t main() { fastio(); int l, q; cin>>l>>q; for (int i = 0; i < (1<<l); i++) { char tmp; cin>>tmp; arr[i] = tmp - '0'; } vector<pair<pii, int>> que; for (int j = 1; j <= q; j++) { int s = 0, t = 0; for (int i = l - 1; i >= 0; i--) { char tmp; cin>>tmp; if (tmp == '?') t |= (1<<i); else if (tmp == '1') s |= (1<<i); } que.pb({{s, t}, j}); } sort(que.begin(), que.end()); for (int i = 0; i < q; i++) { int s = que[i].st.st, t = que[i].st.nd, ind = que[i].nd; if (i > 0) { if (s == que[i - 1].st.st && t == que[i - 1].st.nd) { ans[ind] = ans[que[i - 1].nd]; continue; } } for (int j = t; j != 0; j = (j - 1) & t) ans[ind] += arr[s | j]; ans[ind] += arr[s]; } for (int i = 1; i <= q; i++) cout<<ans[i]<<endl; cerr << "time taken : " << (float)clock() / CLOCKS_PER_SEC << " seconds\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...