답안 #175744

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
175744 2020-01-07T10:36:53 Z Ruxandra985 괄호 문자열 (CEOI16_match) C++14
0 / 100
2 ms 404 KB
/// oare cat de bine merge in practica?
#include <bits/stdc++.h>

using namespace std;
int s[100010];
char sol[100010];
int ok;
int stk[100010];
int match (int st , int dr){
    int i , elem = 0;

    for (i=st;i<=dr;i++){
        if (elem && 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 = dr; i >= st + 1 ; i--){
        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;
    char c;
    c=fgetc(fin);
    n = 0;
    while ( 'a' <= c && c <= 'z' ){
        s[++n] = c-'a';
        c=fgetc(fin);
    }
    ok = 1;
    solve (1 , n);
    if (ok == -1){
        fprintf (fout,"%d\n",ok);
    }
    else {
        for (i=1;i<=n;i++)
            fputc(sol[i],fout);
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 404 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Incorrect 2 ms 256 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 404 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Incorrect 2 ms 256 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 404 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Incorrect 2 ms 256 KB Output isn't correct