Submission #1144438

#TimeUsernameProblemLanguageResultExecution timeMemory
1144438not_amirparentrises (BOI18_parentrises)C++20
56 / 100
1093 ms7396 KiB
#include <bits/stdc++.h> using namespace std; string solve1(string s = "") { if (s.empty()) cin >> s; int n = s.length(); stack<int> fpair, pos, neg; string ans(n, 'G'); for (int i = 0; i < n; i++) { if (s[i] == '(') fpair.push(i), pos.push(i); else { neg.push(i); if (fpair.empty()) { if (neg.size() < 2) return "impossible"; ans[neg.top()] = 'R'; neg.pop(); ans[neg.top()] = 'B'; neg.pop(); } else fpair.pop(); } } if (2 * fpair.size() > pos.size()) return "impossible"; for (int i = 0; i < fpair.size(); i++) { ans[pos.top()] = 'R'; pos.pop(); ans[pos.top()] = 'B'; pos.pop(); } int sum1 = 0, sum2 = 0; for (int i = 0; i < n; i++) { if (ans[i] == 'R' || ans[i] == 'G') sum1 += s[i] == '(' ? 1 : -1; if (ans[i] == 'B' || ans[i] == 'G') sum2 += s[i] == '(' ? 1 : -1; if (sum1 < 0 || sum2 < 0) return "impossible"; } if (sum1 || sum2) return "impossible"; return ans; } int solve2() { static int mem[16]; int n; cin >> n; if (mem[n]) return mem[n]; int ans = 0; for (int i = 0; i < 1 << n; i++) { string check(n, '('); for (int j = 0; j < n; j++) { if (i >> j & 1) check[j] = ')'; } if (solve1(check) != "impossible") ans++; } return mem[n] = ans; } int main() { cin.tie(nullptr)->sync_with_stdio(false); int p, t; cin >> p >> t; while (t--) { if (p == 1) cout << solve1() << '\n'; if (p == 2) cout << solve2() << '\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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...