Submission #51027

#TimeUsernameProblemLanguageResultExecution timeMemory
51027SpaimaCarpatilorMatch (CEOI16_match)C++17
100 / 100
20 ms13536 KiB
#include<bits/stdc++.h>

using namespace std;

int N, t[100009], prv[100009][26];
char sir[100009], ans[100009];

void solve (int i, int j)
{
    if (i > j) return ;
    int k = (sir[j] == sir[i] ? j : prv[j][sir[i]]);
    ans[i] = '(', ans[k] = ')';
/*    for (int k=1; k<=N; k++)
        if (ans[k] == 0) printf (".");
        else printf ("%c", ans[k]);
    printf ("\n");*/
    solve (i + 1, k - 1);
    solve (k + 1, j);
}

int main ()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

scanf ("%s", sir + 1), N = strlen (sir + 1);
for (int i=1; i<=N; i++)
    sir[i] -= 'a';
for (int i=1; i<=N; i++)
{
    if (i > 1 && sir[i - 1] == sir[i]) t[i] = i - 1;
    else t[i] = prv[i - 1][sir[i]];
    if (t[i] != 0)
    {
        int forbC = sir[t[i] - 1];
        if (t[i] == 1) forbC = -1;
        else prv[i][forbC] = t[i] - 1;
        for (int c=0; c<26; c++)
            if (c != forbC)
                prv[i][c] = prv[t[i] - 1][c];
    }
}
int maybe = t[N];
while (maybe > 1 && maybe != 0)
    maybe = t[maybe - 1];
if (maybe != 1)
{
    printf ("-1\n");
    return 0;
}
solve (1, N);
printf ("%s\n", ans + 1);
return 0;
}

Compilation message (stderr)

match.cpp: In function 'void solve(int, int)':
match.cpp:11:50: warning: array subscript has type 'char' [-Wchar-subscripts]
     int k = (sir[j] == sir[i] ? j : prv[j][sir[i]]);
                                                  ^
match.cpp: In function 'int main()':
match.cpp:32:34: warning: array subscript has type 'char' [-Wchar-subscripts]
     else t[i] = prv[i - 1][sir[i]];
                                  ^
match.cpp:26:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
 scanf ("%s", sir + 1), N = strlen (sir + 1);
 ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...