Submission #709271

#TimeUsernameProblemLanguageResultExecution timeMemory
709271vjudge1Homework (CEOI22_homework)C++17
0 / 100
39 ms22576 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, pos[N], p[N], e[N]; bool dp[70][16][1 << 16]; string s; void calc(int v, int l, int r) { if(l == r) { for(int i = 0; i < n; ++i) { dp[v][i][1 << i] = 1; } 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) { for(int x = 0; x < n; ++x) { for(int y = 0; y < n; ++y) { dp[v][(tp ? max(x, y) : min(x, y))][mask | s] |= (dp[v * 2][x][mask] & dp[v * 2 + 1][y][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] == '?') { pos[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); int ans = 0; for(int i = 0; i < n; ++i) ans += dp[1][i][(1 << n) - 1]; cout << ans; 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...