답안 #749623

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
749623 2023-05-28T10:16:02 Z 박상훈(#9965) 괄호 문자열 (CEOI16_match) C++17
37 / 100
2000 ms 944 KB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
int n;
char a[100100], ans[100100];

bool ok(int s, int e, vector<int> st){
	if (e-s < -1) return 0;

	for (int i=s;i<=e;i++){
		if (!st.empty() && st.back()==a[i]) st.pop_back();
		else st.push_back(a[i]);
	}

	return st.empty();
}

int main(){
	scanf("%s", a+1);
	n = strlen(a+1);

	if (!ok(1, n, vector<int>())){
		printf("-1\n");
		return 0;
	}

	vector<int> st;
	vector<pair<int, int>> st2;
	for (int i=1,j=n;i<=n;i++){
		st.push_back(a[i]);

		auto st20 = st2;
		while(j>0){
			if (st.size()==st2.size()+1 && a[j]==a[i]){
				st2.emplace_back(a[j], j);
				j--;
				break;
			}

			else if (st.size()==st2.size()+1 || st2.back().first!=a[j]){
				st2.emplace_back(a[j], j);
				j--;
			}
			else{
				st2.pop_back();
				j--;
			}
		}

		if (!ok(i+1, j, vector<int>())){
			st.pop_back();
			st2 = st20;
			assert(!st.empty() && st.back()==a[i]);

			st.pop_back();
			st2.pop_back();
			j = st2.empty()?n:(st2.back().second-1);

			ans[i] = ')';
		}

		else ans[i] = '(';

		// printf("i = %d -> j = %d\n", i, j);
		// for (auto &x:st) printf("%d ", x-'a'+1);
		// printf("\n");
		// for (auto &[x, y]:st2) printf("(%d, %d) ", x-'a'+1, y);
		// printf("\n");


	}
	ans[n+1] = 0;

	printf("%s\n", ans+1);
}

Compilation message

match.cpp: In function 'int main()':
match.cpp:20:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |  scanf("%s", a+1);
      |  ~~~~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 3 ms 308 KB Output is correct
7 Correct 2 ms 244 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 308 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 3 ms 308 KB Output is correct
7 Correct 2 ms 244 KB Output is correct
8 Correct 5 ms 340 KB Output is correct
9 Correct 45 ms 340 KB Output is correct
10 Correct 36 ms 388 KB Output is correct
11 Correct 64 ms 436 KB Output is correct
12 Execution timed out 2091 ms 944 KB Time limit exceeded
13 Halted 0 ms 0 KB -