제출 #1118026

#제출 시각아이디문제언어결과실행 시간메모리
1118026vjudge1괄호 문자열 (CEOI16_match)C++17
100 / 100
24 ms23640 KiB
#include <bits/stdc++.h> using namespace std; #define SPEED ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); #define ALL(x) x.begin(), x.end() #define intt long long #define pb push_back #define endl "\n" const int sz = 3e6 + 5, L = 20; intt dp[sz][27]; bool valid(string& s) { stack<char>st; for(int i = 0; i < s.size(); i++) { if(!st.empty() && st.top() == s[i]) { st.pop(); } else{ st.push(s[i]); } } return st.empty(); } string ans, s; void rec(intt l, intt r) { if(l < r) { intt pos = dp[r][s[l] - 'a']; ans[l - 1] = '('; ans[pos - 1] = ')'; rec(l + 1, pos - 1); rec(pos + 1, r); } } void solve() { cin >> s; int n = s.size(); if(!valid(s)) { cout << -1 << endl; return; } ans.resize(n); s = '?' + s; bool ok = true; for(int i = 1; i <= n; i++) { for(int j = 0; j < 26; j++) { if(s[i] == char('a' + j)) { dp[i][j] = i; } else { int last = dp[i-1][s[i]-'a']; if(last > 0) { dp[i][j] = dp[last-1][j]; } } } } rec(1, n); cout << ans << endl; } int main() { SPEED; intt tst = 1; // cin >> tst; while (tst--) { solve(); } }

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

match.cpp: In function 'bool valid(std::string&)':
match.cpp:14:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |     for(int i = 0; i < s.size(); i++) {
      |                    ~~^~~~~~~~~~
match.cpp: In function 'void solve()':
match.cpp:45:10: warning: unused variable 'ok' [-Wunused-variable]
   45 |     bool ok = true;
      |          ^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...