답안 #867558

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
867558 2023-10-28T16:19:51 Z 42kangaroo parentrises (BOI18_parentrises) C++17
0 / 100
0 ms 348 KB
//
// Created by 42kangaroo on 28/10/2023.
//
#include "bits/stdc++.h"

using namespace std;

#define int long long

array<char,3> col{'G', 'R', 'B'};

signed main() {
	int p, t; cin >> p >> t;
	while (t--) {
		if (p == 1) {
			string s; cin >> s;
			bool pos = true;
			vector<int> co(s.size(),0);
			vector<int> closeInd;
			deque<int> openInd;
			int act = 0;
			for (int i = 0; i < s.size(); ++i) {
				if (s[i] == '(') {
					++act;
				} else {
					closeInd.push_back(i);
					--act;
					if (act < 0) {
						if (closeInd.size() < 2) {
							cout << "impossible\n";
							pos = false;
							break;
						} else {
							co[closeInd.back()] = 2;
							closeInd.pop_back();
							co[closeInd.back()] = 1;
							closeInd.pop_back();
							++act;
						}
					}
				}
			}
			act = 0;
			for(int i = s.size() - 1; i >= 0; --i) {
				if (s[i] == '(') {
					openInd.push_back(i);
					--act;
					if (act < 0) {
						if (openInd.empty()) {
							cout << "impossible\n";
							pos = false;
							break;
						} else {
							co[openInd.front()] = 2;
							openInd.front();
							++act;
						}
					}
				} else if (co[i] < 2){
					++act;
				}
			}
			assert(!pos || act == 0);
			openInd.clear();
			for(int i = s.size() - 1; i >= 0; --i) {
				if (s[i] == '(' && (co[i] == 0 || co[i] == 2)) {
					if (co[i] == 0) {
						openInd.push_back(i);
					}
					--act;
					if (act < 0) {
						if (openInd.empty()) {
							cout << "impossible\n";
							pos = false;
							break;
						} else {
							co[openInd.back()] = 1;
							openInd.pop_back();
							++act;
						}
					}
				} else if (s[i] == ')' && (co[i] == 0 || co[i] == 2)){
					++act;
				}
			}
			assert(!pos || act == 0);
			if (pos) {
				for (auto e: co) {
					cout << col[e];
				}
				cout << "\n";
			}
			/*if (pos) {
				for (int i = 0; i < s.size(); ++i) {
					if (co[i] != 2) cout << s[i];
				}
				cout << "\n";
				for (int i = 0; i < s.size(); ++i) {
					if (co[i] != 1) cout << s[i];
				}
				cout << "\n";
			}*/
		}
	}
}

Compilation message

parentrises.cpp: In function 'int main()':
parentrises.cpp:22:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |    for (int i = 0; i < s.size(); ++i) {
      |                    ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
2 Halted 0 ms 0 KB -