# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
127253 | sealnot123 | Match (CEOI16_match) | C++14 | 2 ms | 376 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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(2*onstack[b]>=cnt[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);*/
}
d = 0;
for(i=1;i<=n;i++){
d += (ans[i]=='(')?1:-1;
if(d<0) assert(0);
}
printf("%s",ans+1);
return 0;
}
/*
abbccddabbccdd
abbacabbac
accaccacca
aaaabbbb
aaabcaacba (()((())))
*/
Compilation message (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... |