답안 #1032716

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1032716 2024-07-24T06:45:47 Z 김은성(#10965) 괄호 문자열 (CEOI16_match) C++17
37 / 100
2000 ms 876 KB
#include <bits/stdc++.h>
using namespace std;
char s[100009], t[100009];
int n;
bool possible(int idx, vector<char> st){
    int i;
    for(i=idx; i<n; i++){
        if(!st.empty() && st.back() == s[i])
            st.pop_back();
        else
            st.push_back(s[i]);
    }
    return st.empty();
}
bool inverse(int idx, vector<char> vec){
    int i, j = 0;
    vector<char> st;
    for(i=n-1; i>=idx; i--){
        if(j < vec.size() && vec[j] == s[i])
            j++;
        else{
            if(!st.empty() && st.back() == s[i])
                st.pop_back();
            else
                st.push_back(s[i]);
        }
        if(j==vec.size())
            return 1;
    }
    return 0;
}
int main(){
    int i;
    scanf(" %s", s);
    n = strlen(s);
    vector<char> st;
    if(!possible(0, st)){
        printf("-1\n");
        return 0;
    }
    for(i=0; i<n; i++){
        st.push_back(s[i]);
        t[i] = '(';
        if(st.size()>1 && st[st.size()-2] == s[i]){
            if(!inverse(i+1, st) || !possible(i+1, st)){
                t[i] = ')';
                st.pop_back();
                st.pop_back();
            }
        }
    }
    printf("%s\n", t);
    return 0;
}

Compilation message

match.cpp: In function 'bool inverse(int, std::vector<char>)':
match.cpp:19:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |         if(j < vec.size() && vec[j] == s[i])
      |            ~~^~~~~~~~~~~~
match.cpp:27:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |         if(j==vec.size())
      |            ~^~~~~~~~~~~~
match.cpp: In function 'int main()':
match.cpp:34:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 |     scanf(" %s", s);
      |     ~~~~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 2 ms 396 KB Output is correct
7 Correct 4 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 2 ms 396 KB Output is correct
7 Correct 4 ms 348 KB Output is correct
8 Correct 31 ms 460 KB Output is correct
9 Correct 34 ms 524 KB Output is correct
10 Correct 28 ms 348 KB Output is correct
11 Correct 20 ms 532 KB Output is correct
12 Correct 1895 ms 876 KB Output is correct
13 Correct 1979 ms 736 KB Output is correct
14 Execution timed out 2060 ms 776 KB Time limit exceeded
15 Halted 0 ms 0 KB -