# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
127232 | sealnot123 | 괄호 문자열 (CEOI16_match) | C++14 | 2 ms | 376 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#define x first
#define y second
#define all(x) (x).begin(),(x).end()
#define SZ(x) (int)(x).size()
#define push_back pb
#define emplace_back eb
using namespace std;
typedef long long LL;
typedef double DD;
typedef long double LD;
typedef pair<int,int> PII;
typedef pair<LL,LL> PLL;
const int N = 100007;
char str[N], ans[N];
int cnt[26], onstack[26];
stack<int> sta;
void PUSH(int a, int b){
onstack[b]++;
sta.push(a);
}
void POP(int b){
onstack[b]--;
sta.pop();
}
void del(){
int a = sta.top(), b = str[a]-'a', c;
POP(b);
while(!sta.empty() && str[sta.top()]-'a' != b){
c = sta.top();
del();
if(!sta.empty() && c == sta.top()) break;
}
if(sta.empty()){
PUSH(a, b);
return ;
}
if(str[sta.top()]-'a' != b){
if(onstack[b]){ printf("-1"); exit(0);
}else{ PUSH(a, b); return ; }
}
POP(b);
ans[a] = ')';
cnt[b] -= 2;
}
int main(){
int i,j,k,l,a,b,c,d;
scanf("%s",str+1);
int n = strlen(str+1);
for(i=1;i<=n;i++) cnt[str[i]-'a']++;
for(i=0;i<26;i++){
if(cnt[i]&1){
printf("-1");
return 0;
}
}
for(i=1;i<=n;i++){
a = str[i]-'a';
ans[i] = '(';
PUSH(i, a);
if(2*onstack[a] > cnt[a]) del();
/*printf("==%d %s\n",i,ans+1);*/
}
printf("%s",ans+1);
return 0;
}
/*
abbccddabbccdd
abbacabbac
accaccacca
aaaabbbb
*/
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |