제출 #247438

#제출 시각아이디문제언어결과실행 시간메모리
247438evpipis괄호 문자열 (CEOI16_match)C++11
100 / 100
20 ms12160 KiB
#include <bits/stdc++.h> using namespace std; const int len = 1e5+5, sig = 26; char str[len], out[len]; int arr[len], dp[len][sig]; stack<int> mys; bool check(int n){ for (int i = 1; i <= n; i++){ if (!mys.empty() && mys.top() == arr[i]) mys.pop(); else mys.push(arr[i]); } return (mys.empty()); } void solve(int l, int r){ if (l > r) return; int k = dp[r][arr[l]]; //printf("l = %d, r = %d, k = %d\n", l, r, k); out[l] = '('; out[k] = ')'; solve(l+1, k-1); solve(k+1, r); } int main(){ scanf("%s", str); int n = strlen(str); for (int i = 1; i <= n; i++) arr[i] = str[i-1]-'a'; if (!check(n)){ printf("-1\n"); return 0; } for (int i = 1; i <= n; i++){ int k = dp[i-1][arr[i]]; if (k > 0) for (int j = 0; j < sig; j++) dp[i][j] = dp[k-1][j]; dp[i][arr[i]] = i; } solve(1, n); for (int i = 1; i <= n; i++) printf("%c", out[i]); printf("\n"); return 0; }

컴파일 시 표준 에러 (stderr) 메시지

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]
     scanf("%s", str);
     ~~~~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...