# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
175851 | Ruxandra985 | Match (CEOI16_match) | C++14 | 2050 ms | 15368 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>
#pragma GCC optimize "Ofast"
using namespace std;
int sp[30][100010];
char sol[100010] , s[100010];
int ok;
int stk[100010] , pre[30][100010];
int match (int st , int dr){
int i , elem = 0;
if (st > dr)
return 1;
for (i=0;i<'z' - 'a';++i){
if (((sp[i][dr] - sp[i][st-1]) & 1) == 1)
return 0;
}
for (i=st;i<=dr;++i){
if (stk[elem] == s[i])
elem--;
else stk[++elem] = s[i];
}
return (elem == 0);
}
void solve (int st , int dr){
int i;
if (st > dr)
return;
if (!ok) /// nu mai are rost
return;
/// stii ca pe st pui ( , gaseste i match ul
for (i = pre[s[st]][dr]; i >= st + 1 ; i = pre[s[st]][i-1]){
if (match(st + 1 , i - 1) && match(i + 1 , dr))
break;
}
if (i < st + 1){
ok = 0;
return;
}
else {
sol[st] = '(';
sol[i] = ')';
solve(st + 1 , i - 1);
solve (i + 1 , dr);
}
}
int main()
{
FILE *fin = stdin;
FILE *fout = stdout;
int n , i;
fgets (s+1 , 100010 , fin);
n = 0;
while ( 'a' <= s[n+1] && s[n+1] <= 'z' ){
n++;
s[n]-='a';
for (i=0;i<='z'-'a';++i){
sp[i][n] = sp[i][n-1] + (s[n] == i);
if (i == s[n])
pre[i][n] = n;
else pre[i][n] = pre[i][n-1];
}
}
stk[0] = -1;
ok = 1;
solve (1 , n);
if (ok == 0){
fprintf (fout,"-1");
}
else {
fputs (sol+1,fout);
}
return 0;
}
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... |