Submission #709338

#TimeUsernameProblemLanguageResultExecution timeMemory
709338vjudge1Homework (CEOI22_homework)C++17
10 / 100
1081 ms23092 KiB
#include<bits/stdc++.h> #define x first #define y second #define sz(v) (int)v.size() #define pb push_back #define nl "\n" using namespace std; const int N = (int)1e6 + 7; const int inf = (int)1e9 + 7; int n, e[N], mn[900][1 << 16], mx[900][1 << 16]; string s; void calc(int v, int l, int r) { fill(mn[v], mn[v] + (1 << n), inf); if(l == r) { for(int i = 0; i < n; ++i) { mx[v][1 << i] = mn[v][1 << i] = i; } return; } bool tp = (s[l + 1] == 'a'); int mid = e[l]; calc(v * 2, l + 4, mid - 1); calc(v * 2 + 1, mid + 1, r - 1); for(int mask = 0; mask < (1 << n); ++mask) { int msk = (((1 << n) - 1) ^ mask); for(int s = msk; s; s = (s - 1) & msk) { if(tp) { mx[v][mask | s] = max(mx[v][mask | s], max(mx[v * 2][mask], mx[v * 2 + 1][s])); mn[v][mask | s] = min(mn[v][mask | s], max(mn[v * 2][mask], mn[v * 2 + 1][s])); } else { mx[v][mask | s] = max(mx[v][mask | s], min(mx[v * 2][mask], mx[v * 2 + 1][s])); mn[v][mask | s] = min(mn[v][mask | s], min(mn[v * 2][mask], mn[v * 2 + 1][s])); } } } } int main() { ios_base::sync_with_stdio(NULL); cin.tie(0); cin >> s; for(int i = 0; i < sz(s); ++i) { if(s[i] == '?') { n++; } } stack<int> st; for(int i = 0; i < sz(s); ++i) { if(s[i] == 'm') st.push(i); if(s[i] == ',') { assert(!st.empty()); e[st.top()] = i; st.pop(); } } calc(1, 0, sz(s) - 1); cout << mx[1][(1 << n) - 1] - mn[1][(1 << n) - 1] + 1 << nl; 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...