제출 #36883

#제출 시각아이디문제언어결과실행 시간메모리
36883aomeMatch (CEOI16_match)C++14
37 / 100
6 ms2632 KiB
#include <bits/stdc++.h>
using namespace std;

// subtask 2

int n, cnt[2005];
char res[2005];
string s; 

void solve(int l, int r) {
	if (l > r) return;
	stack<char> st;
	for (int i = l + 1; i <= r; ++i) {
		cnt[i] = 0;
		if (!st.size()) {
			st.push(s[i]), cnt[i] += s[i] == s[l];
		}
		else {
			if (st.top() == s[i]) st.pop();
			else st.push(s[i]);
		}
	}
	while (st.size()) st.pop();
	for (int i = r; i >= l + 1; --i) {
		if (!st.size()) {
			st.push(s[i]), cnt[i] += s[i] == s[l];
		}
		else {
			if (st.top() == s[i]) st.pop();
			else st.push(s[i]);
		}
	}
	int pos = 0;
	for (int i = l + 1; i <= r; ++i) {
		if (cnt[i] == 2) pos = i;
	}
	if (!pos) {
		cout << -1; exit(0);
	}
	res[l] = '(', res[pos] = ')';
	solve(l + 1, pos - 1), solve(pos + 1, r);
}

int main() {
	ios::sync_with_stdio(false);
	cin >> s, n = s.size();
	if (n > 2000) return 0;
	solve(0, n - 1);
	for (int i = 0; i < n; ++i) cout << res[i];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...