답안 #604428

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
604428 2022-07-25T06:21:48 Z Zanite 괄호 문자열 (CEOI16_match) C++17
0 / 100
0 ms 212 KB
#include <bits/stdc++.h>
using namespace std;

const int maxL  = 1e5 + 10;
const int Alph  = 26;

int L, freq[Alph], tfreq[Alph];
char S[maxL], ans[maxL];

void Exit() {
    printf("-1\n");
    exit(0);
}

int main() {
    scanf("%s", S);
    L = strlen(S);
    for (int i = 0; i < L; i++) {
        freq[S[i] - 'a']++;
    }

    for (int i = 0; i < Alph; i++) {
        if (freq[i] & 1) {Exit();}

        freq[i] >>= 1;
        tfreq[i] = freq[i];

        //cout << freq[i] << '\n';
    }

    vector<char> St;
    for (int i = 0; i < L; i++) {
        if (tfreq[S[i] - 'a']) {
            St.push_back(S[i]);
            tfreq[S[i] - 'a']--;
        } else {
            if (St.empty() || (St.back() != S[i])) {
                Exit();
            } else {
                St.pop_back();
            }
        }
    }
    if (!St.empty()) {Exit();}

    for (int i = 0; i < L; i++) {
        if (freq[S[i] - 'a']) {
            putchar('(');
            freq[S[i] - 'a']--;
        } else {
            putchar(')');
        } 
    }
    putchar('\n');
}

Compilation message

match.cpp: In function 'int main()':
match.cpp:16:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     scanf("%s", S);
      |     ~~~~~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Incorrect 0 ms 212 KB Output isn't correct
3 Halted 0 ms 0 KB -