답안 #98564

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
98564 2019-02-24T10:45:27 Z tdwn parentrises (BOI18_parentrises) C++17
0 / 100
3 ms 384 KB
#include <bits/stdc++.h>
#define ll long long
using namespace std;

string code;
string answ;

void solvea() {
    cin>>code;
    answ = code;
    stack<int>p1, p2;

    for(int i=0;i<code.length();i++) {
        if(code[i] == '(') {
            p1.push(i);
        }
        else {
            if(p1.size() != 0) {
                answ[i] = 'B';
                p2.push(p1.top());
                answ[p1.top()] = 'B';
                p1.pop();
            }
            else if(p2.size() != 0) {
                answ[p2.top()] = 'G';
                answ[i] = 'R';
                p2.pop();
            }
        }
    }


    while(p1.size() > 0) p1.pop();
    while(p2.size() > 0) p2.pop();

    for(int i=code.length()-1;i>=0;i--) {
        if(code[i] == ')' && answ[i] == 'B') {
            p1.push(i);
        }
        else if(code[i] == '(' && answ[i] == '(') {
            if(p1.size() != 0) {
                answ[p1.top()] = 'G';
                answ[i] = 'R';
                p1.pop();
            }
        }
    }

    int sb = 0, sr = 0;
    for(int i=0;i<code.length();i++) {
        if(answ[i] != 'G' && answ[i] != 'B' && answ[i] != 'R') {
            cout<<"Impossible\n";
            return;
        }

        if(code[i] == '(') {
            if(answ[i] == 'B') sb++;
            else if(answ[i] == 'R') sr++;
            else {
                sb++; sr++;
            }
        }
        else {
            if(answ[i] == 'B') sb--;
            else if(answ[i] == 'R') sr--;
            else {
                sb--; sr--;
            }
        }

        if(sb < 0 || sr < 0) {
            cout<<"Impossible\n";
            return;
        }
    }

    if(sb != 0 || sr != 0) {
        cout<<"Impossible\n";
        return;
    }

    cout<<answ<<"\n";
    return;
}

void solveb() {
    cout<<"0\n";
}

int main() {
    int P, T;
    cin>>P;
    cin>>T;

    while(T--) {
        if(P == 1) solvea();
        else solveb();
    }
    return 0;
}

Compilation message

parentrises.cpp: In function 'void solvea()':
parentrises.cpp:13:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<code.length();i++) {
                 ~^~~~~~~~~~~~~~
parentrises.cpp:50:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<code.length();i++) {
                 ~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 3 ms 384 KB Output is correct
3 Incorrect 2 ms 256 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 256 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 384 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 384 KB Output isn't correct