Submission #1254637

#TimeUsernameProblemLanguageResultExecution timeMemory
1254637Alexe1900parentrises (BOI18_parentrises)C++20
50 / 100
65 ms7480 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

using vi = vector<int>;
using vvi = vector<vi>;

signed main() {
    int p; cin >> p;
    int t; cin >> t;

    while (t--) {
        if (p == 1) {
            string brackets; cin >> brackets;
            queue<int> q;
            string colors; colors.resize(brackets.length(), '?');
            int cnt = 0;
            int possible = 1;
            for (int i = 0; i < brackets.length(); i++) {
                if (brackets[i] == '(') {
                    q.push(i);
                    cnt++;
                } else {
                    if (cnt == 0) {
                        if (q.empty()) {
                            possible = 0;
                            break;
                        }
                        int a = q.front();
                        q.pop();
                        colors[a] = 'G';
                    } else cnt--;
                }
            }

            if (!possible) {
                cout << "impossible\n";
                continue;
            }

            for (int i = brackets.length()-1; i >= 0; i--) {
                if (brackets[i] == ')' and cnt) {
                    cnt--;
                    colors[i] = 'G';
                }
            }

            if (cnt > 0) {
                cout << "impossible\n";
                continue;
            }

            int sr = 0, sb = 0;

            for (int i = 0; i < brackets.length(); i++) {
                if (brackets[i] == '(') {
                    if (colors[i] != 'G') {
                        cnt++;
                        if (cnt % 2 == 0) colors[i] = 'R';
                        else colors[i] = 'B';
                    }
                    if (colors[i] != 'R') sb++;
                    if (colors[i] != 'B') sr++;
                } else {
                    if (colors[i] != 'G') {
                        if (cnt % 2 == 0) colors[i] = 'R';
                        else colors[i] = 'B';
                        cnt--;
                    }
                    if (colors[i] != 'R') sb--;
                    if (colors[i] != 'B') sr--;
                }
                if (sb < 0 or sr < 0) {
                    possible = 0;
                    break;
                }
            }

            if (!possible) {
                cout << "impossible\n";
                continue;
            }

            if (sb == 0 and sr == 0) cout << colors << "\n";
            else cout << "impossible\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...