#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |