제출 #1144442

#제출 시각아이디문제언어결과실행 시간메모리
1144442not_amirparentrises (BOI18_parentrises)C++20
56 / 100
1096 ms7396 KiB
#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 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...