Submission #223629

#TimeUsernameProblemLanguageResultExecution timeMemory
223629MKopchevMatch (CEOI16_match)C++14
100 / 100
27 ms12032 KiB
#include<bits/stdc++.h>
using namespace std;

const int nmax=1e5+42;

int n;
string inp;

char output[nmax];

int prev_pos[nmax][26];

void solve(int l,int r)
{
    if(l>r)return;

    int mid=prev_pos[r][inp[l]-'a'];

    if(l>=mid)
    {
        cout<<-1<<endl;
        exit(0);
    }

    output[l]='(';
    output[mid]=')';

    solve(l+1,mid-1);

    solve(mid+1,r);
}
int main()
{
    cin>>inp;
    n=inp.size();

    memset(prev_pos,-1,sizeof(prev_pos));

    for(int i=0;i<n;i++)
        for(int j=0;j<26;j++)
    {
        if(inp[i]==j+'a')prev_pos[i][j]=i;
        else if(i&&prev_pos[i-1][inp[i]-'a']>0)prev_pos[i][j]=prev_pos[prev_pos[i-1][inp[i]-'a']-1][j];
    }

    solve(0,n-1);

    for(int i=0;i<n;i++)
        cout<<output[i];

    cout<<endl;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...