# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
128346 |
2019-07-10T18:53:14 Z |
Vardanyan |
Match (CEOI16_match) |
C++14 |
|
1312 ms |
104472 KB |
#include <bits/stdc++.h>
using namespace std;
const int N = 100 * 1000 + 5;
int p[N][30];
string s;
string ans;
void rec(int l, int r) {
if (l >= r) return;
if (r - l == 1) {
ans[l] = '(';
ans[r] = ')';
return;
}
if (s[l] == s[r]) {
ans[l] = '(';
ans[r] = ')';
rec(l + 1, r - 1);
return;
}
int pos = p[r][s[l] - 'a'+1];
ans[l] = '(';
ans[pos] = ')';
if (r - l <= 1) return;
rec(l + 1, pos - 1);
rec(pos + 1, r);
}
long long pw[1000 * 100 + 5];
const int MOD = 1000 * 1000 * 1000 + 7;
map<long long, vector<int> > g[30];
int main() {
ios_base::sync_with_stdio(false);
//freopen("7-router.out","w",stdout);
cin >> s;
stack<char> st;
for (int i = 0; i<s.length(); i++) {
ans += "x";
if (!st.size()) {
st.push(s[i]);
continue;
}
else {
char c = st.top();
if (c == s[i]) {
st.pop();
continue;
}
st.push(s[i]);
}
}
if (st.size()) {
cout << -1 << endl;
return 0;
}
pw[0] = 1;
for (int i = 1; i <= s.length(); i++) {
pw[i] = pw[i - 1] * 259;
pw[i] %= MOD;
}
long long hsh = 0;
map<long long, int> mp;
map<long long, bool> bl;
for (int i = 0; i<s.length(); i++) {
if (!st.size()) {
st.push(s[i]);
hsh += (pw[st.size()] * (s[i] - 'a' + 1));
hsh %= MOD;
/*int x = mp[hsh];
if (bl[hsh]) {
p[i][s[x] - 'a'] = x;
}*/
for (int ii = 1; ii <= 26; ii++) {
for (int j = 0; j < g[ii][hsh].size(); j++) {
p[i][ii] = max(p[i][ii], g[ii][hsh][j]);
}
}
mp[hsh] = i;
bl[hsh] = 1;
g[s[i]-'a'+1][hsh].push_back(i);
continue;
}
char c = st.top();
if (c == s[i]) {
hsh -= (pw[st.size()] * (s[i] - 'a' + 1));
hsh += ((long long)30*MOD);
hsh %= MOD;
st.pop();
}
else {
st.push(s[i]);
hsh += (pw[st.size()] * (s[i] - 'a' + 1));
hsh %= MOD;
}
/*int x = mp[hsh];
if (bl[hsh]) {
p[i][s[x] - 'a'] = x;
}*/
for (int ii = 1; ii <= 26; ii++) {
for (int j = 0; j < g[ii][hsh].size(); j++) {
p[i][ii] = max(p[i][ii], g[ii][hsh][j]);
}
}
mp[hsh] = i;
bl[hsh] = 1;
g[s[i] - 'a' + 1][hsh].push_back(i);
}
/*for (int j = 0; j<s.length(); j++) {
for (int i = 1; i<=2; i++) cout << p[j][i] << " ";
cout << endl;
}*/
rec(0, s.length() - 1);
cout << ans << endl;
return 0;
}
Compilation message
match.cpp: In function 'int main()':
match.cpp:35:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i<s.length(); i++) {
~^~~~~~~~~~~
match.cpp:55:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 1; i <= s.length(); i++) {
~~^~~~~~~~~~~~~
match.cpp:62:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int i = 0; i<s.length(); i++) {
~^~~~~~~~~~~
match.cpp:72:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int j = 0; j < g[ii][hsh].size(); j++) {
~~^~~~~~~~~~~~~~~~~~~
match.cpp:98:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for (int j = 0; j < g[ii][hsh].size(); j++) {
~~^~~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
5 ms |
1200 KB |
Output is correct |
5 |
Correct |
6 ms |
1464 KB |
Output is correct |
6 |
Correct |
4 ms |
636 KB |
Output is correct |
7 |
Correct |
7 ms |
1528 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
376 KB |
Output is correct |
2 |
Correct |
2 ms |
376 KB |
Output is correct |
3 |
Correct |
2 ms |
376 KB |
Output is correct |
4 |
Correct |
5 ms |
1200 KB |
Output is correct |
5 |
Correct |
6 ms |
1464 KB |
Output is correct |
6 |
Correct |
4 ms |
636 KB |
Output is correct |
7 |
Correct |
7 ms |
1528 KB |
Output is correct |
8 |
Correct |
30 ms |
5624 KB |
Output is correct |
9 |
Correct |
44 ms |
6904 KB |
Output is correct |
10 |
Correct |
42 ms |
8332 KB |
Output is correct |
11 |
Correct |
43 ms |
8440 KB |
Output is correct |
12 |
Correct |
958 ms |
71800 KB |
Output is correct |
13 |
Correct |
1119 ms |
77656 KB |
Output is correct |
14 |
Correct |
985 ms |
81884 KB |
Output is correct |
15 |
Correct |
616 ms |
12028 KB |
Output is correct |
16 |
Correct |
606 ms |
11896 KB |
Output is correct |
17 |
Correct |
685 ms |
58044 KB |
Output is correct |
18 |
Correct |
493 ms |
13496 KB |
Output is correct |
19 |
Correct |
1244 ms |
104472 KB |
Output is correct |
20 |
Correct |
784 ms |
71672 KB |
Output is correct |
21 |
Correct |
1312 ms |
102220 KB |
Output is correct |