제출 #1235067

#제출 시각아이디문제언어결과실행 시간메모리
1235067avighnaHomework (CEOI22_homework)C++20
10 / 100
1097 ms312972 KiB
#include <bits/stdc++.h> int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::string s; std::cin >> s; if (s[0] != 'm') { std::cout << "1\n"; return 0; } std::vector<std::vector<int>> at_depths; for (int i = 0, depth = 0; i < s.length(); ++i) { depth += s[i] == '('; depth -= s[i] == ')'; if (s[i] == ',') { if (at_depths.size() <= depth) { at_depths.resize(depth + 1); } at_depths[depth].push_back(i); } } std::vector<std::vector<int>> adj; std::vector<bool> is_max; // 0 == min, 1 == max std::vector<int> trans; int node = 0, leaf = 0; auto make = [&](auto &&self, int l, int r, int d) -> int { int cur = node++; while (adj.size() <= cur) { adj.push_back({}); is_max.push_back(false); trans.push_back(0); } if (s[l] == '?') { trans[cur] = leaf++; return cur; } is_max[cur] = s[l + 1] == 'a'; int prev = l + 4; for (auto it = std::lower_bound(at_depths[d].begin(), at_depths[d].end(), l); it != at_depths[d].end() and *it <= r; ++it) { int u = self(self, prev, *it - 1, d + 1); adj[cur].push_back(u); prev = *it + 1; } int u = self(self, prev, r - 1, d + 1); adj[cur].push_back(u); return cur; }; make(make, 0, s.length() - 1, 1); const int n = std::count(s.begin(), s.end(), '?'); std::vector<int> p(n); std::iota(p.begin(), p.end(), 0); std::vector<int> seen(n); int ans = 0; do { auto dfs = [&](auto &&self, int u) { if (adj[u].empty()) { return p[trans[u]]; } int a = self(self, adj[u][0]); int b = self(self, adj[u][1]); if (is_max[u]) { return std::max(a, b); } return std::min(a, b); }; int u = dfs(dfs, 0); if (!seen[u]) { ans += 1; seen[u] = true; } } while (std::next_permutation(p.begin(), p.end())); std::cout << ans << '\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...