Submission #124704

#TimeUsernameProblemLanguageResultExecution timeMemory
124704eriksuenderhaufMatch (CEOI16_match)C++11
100 / 100
24 ms11256 KiB
#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 5; char str[MAXN]; int a[MAXN], nx[MAXN][26]; void solve(int l, int r) { if (l > r) return; if (str[l] == str[r]) { a[r] = 1; solve(l+1, r-1); return; } int mx = nx[r][str[l]-'a']; a[mx] = 1; solve(l+1,mx-1); solve(mx+1,r); } int main() { scanf("%s", str+1); int n = strlen(str+1); if (n & 1) return !printf("-1\n"); stack<int> st; st.push(1); nx[1][str[1]-'a'] = 1; for (int i = 2; i <= n; i++) { if (!st.empty() && str[i] == str[st.top()]) st.pop(); else st.push(i); for (int j = 0; j < 26; j++) if (nx[i-1][str[i]-'a']) nx[i][j] = nx[nx[i-1][str[i]-'a']-1][j]; nx[i][str[i]-'a'] = i; } if (!st.empty()) return !printf("-1\n"); solve(1, n); for (int i = 1; i <= n; i++) if (a[i]) printf(")"); else printf("("); return 0; }

Compilation message (stderr)

match.cpp: In function 'int main()':
match.cpp:22:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%s", str+1);
  ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...