제출 #861970

#제출 시각아이디문제언어결과실행 시간메모리
861970maks007parentrises (BOI18_parentrises)C++14
50 / 100
190 ms58092 KiB
#include "bits/stdc++.h"
 
using namespace std;
 
#define int long long
 
pair <int,int> mn(pair <int,int> a, pair <int,int> b) {
	if(max(a.first, a.second) < max(b.first, b.second) ) return a;
	return b;
}
 
signed main () {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int T;
	cin >> T;
	int q;
	cin >> q;
	while(q --) {
		string str;
		cin >> str;
		int n = str.size();
		stack <int> st;
		vector <int> cnt(n, 0), nopeopen, nopeclose;
		for(int i = 0; i < n; i ++) {
			if(str[i] == ')') {
				if(st.size() == 0) {
					nopeclose.push_back(i);
					continue;
				}
				cnt[i] ++;
				st.pop();
			}else {
				st.push(i);
				cnt[i] ++;
			}
		}
		while(st.size() != 0) nopeopen.push_back(st.top()), st.pop();
		set <int> close, open;
		for(int i = 0; i < str.size(); i ++) {
			if(cnt[i] == 1) {
				if(str[i] == '(') open.insert(i);
				else close.insert(i);
			}
		}
		sort(nopeopen.rbegin(), nopeopen.rend());
		for(auto i : nopeopen) {
			if(close.size() == 0) {
				cout << "impossible\n";
				goto end;
			}
			if(i > *--close.end()) {
				cout << "impossible\n";
				goto end;
			}
			cnt[*--close.end()] ++;
			close.erase(--close.end());
			cnt[i] = 5; 
		}
		sort(nopeclose.begin(), nopeclose.end());
		for(auto i : nopeclose) {
			if(open.size() == 0) {
				cout << "impossible\n";
				goto end;
			}
			if(i < *open.begin()) {
				cout << "impossible\n";
				goto end;
			}
			cnt[*open.begin()] ++;
			open.erase(open.begin());
			cnt[i] = 5;
		}
		for(auto i : cnt) {
			if(i == 2) cout << "G";
			else if(i == 1) cout << "R";
			else cout << "B";
			assert(i > 0);
		}
		cout << "\n";
		continue;
		end:;
	}
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

parentrises.cpp: In function 'int main()':
parentrises.cpp:40:20: 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]
   40 |   for(int i = 0; i < str.size(); i ++) {
      |                  ~~^~~~~~~~~~~~
#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...