#include <bits/stdc++.h>
using namespace std;
string solve1(string s = "") {
if (s.empty())
cin >> s;
int n = s.length();
stack<int> pos, neg;
int pcnt = 0;
string ans(n, 'G');
for (int i = 0; i < n; i++) {
if (s[i] == '(')
pos.push(i), pcnt++;
else {
neg.push(i);
if (pcnt == 0) {
if (neg.size() < 2)
return "impossible";
ans[neg.top()] = 'R';
neg.pop();
ans[neg.top()] = 'B';
neg.pop();
}
else
pcnt--;
}
}
if (2 * pcnt > pos.size())
return "impossible";
for (int i = 0; i < pcnt; 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... |