#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 100007;
int n;
char a[N],ans[N];
int pos[N];
bool can(int l, int r) {
stack < char > s;
int i;
for(i=l;i<=r;i++) {
if(!s.empty() && s.top()==a[i]) s.pop();
else s.push(a[i]);
}
return s.empty();
}
void solve(int l, int r) {
if(l>r) return;
if(a[l]==a[r]) {
ans[l]='(';
ans[r]=')';
solve(l+1,r-1);
return;
}
int where=pos[r];
while(where>0 && a[l]!=a[where-1]) {
where=pos[where-1]-1;
}
assert(where>l);
if(l<where-1) {
ans[l]='(';
ans[where-1]=')';
}
solve(l+1,where-2);
solve(where,r);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int i,where;
scanf("%s", a+1);
n=strlen(a+1);
if(!can(1,n)) {
printf("-1\n");
return 0;
}
pos[1]=0;
for(i=2;i<=n;i++) {
if(a[i]==a[i-1]) {
pos[i]=i-1;
continue;
}
else {
stack < char > s;
where=max(pos[i-1]-1,0);
s.push(a[i]);
while(where>0) {
if(s.top()==a[where]) {
s.pop();
if(s.empty()) break;
}
else {
s.push(a[where]);
}
--where;
}
pos[i]=where;
}
}
//for(i=1;i<=n;i++) printf("pos [ %d ] = %d\n", i, pos[i]);
solve(1,n);
for(i=1;i<=n;i++) {
printf("%c", ans[i]);
}
printf("\n");
return 0;
}
Compilation message
match.cpp: In function 'int main()':
match.cpp:55:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", a+1);
~~~~~^~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
436 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
436 KB |
Output is correct |
4 |
Runtime error |
3 ms |
896 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
436 KB |
Output is correct |
4 |
Runtime error |
3 ms |
896 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
5 |
Halted |
0 ms |
0 KB |
- |