제출 #971251

#제출 시각아이디문제언어결과실행 시간메모리
971251vjudge1Homework (CEOI22_homework)C++17
10 / 100
1082 ms124188 KiB
#include <bits/stdc++.h> using namespace std; using vi = vector<int>; int main() { string s; cin >> s; int n = 0, m = 0; vector<array<int, 2> > Fii; vector<int> Tip;/// -1 -> min; 0 -> valoare; 1 -> maxim int ultp = 0; function<int(int)> parse = [&](int poz) -> int { /// va crea un nod cu expresia care incepe la poz while(s[poz] == ',' || s[poz] == '(' || s[poz] == ')') ++poz; ultp = max(ultp, poz); ++n; if(s[poz] == '?') { ++m; Fii.push_back({-1, -1}); Tip.emplace_back(0); return int(Tip.size()) - 1; } int f1 = parse(poz + 4), f2 = parse(ultp + 1); if(s[poz + 1] == 'i') Tip.emplace_back(-1); else Tip.emplace_back(1); Fii.push_back({f1, f2}); return int(Tip.size()) - 1; }; int rad = parse(0); vi P; for(int i = 0; i < m; ++i) P.push_back(i); set<int> S; do { int p = 0; function<int(int)> eval = [&](int u) { if(Tip[u] == 0) { return P[p++]; } int v1 = eval(Fii[u][0]), v2 = eval(Fii[u][1]); if(Tip[u] == -1) return min(v1, v2); return max(v1, v2); }; S.insert(eval(rad)); } while(next_permutation(P.begin(), P.end())); cout << S.size() << "\n"; 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...