# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
52820 |
2018-06-27T01:23:56 Z |
ainta(#1378) |
괄호 문자열 (CEOI16_match) |
C++11 |
|
2000 ms |
12212 KB |
#include<cstdio>
#include<algorithm>
#define N_ 101000
using namespace std;
char p[N_], r[N_];
int n, D[N_][27], w[N_], Bef[N_][20], st[N_];
bool OK(int b, int e) {
for (int i = 19; i >= 0; i--) {
if (Bef[e][i] >= b)e = Bef[e][i];
}
return b == e;
}
bool Pos(int pv) {
int i, top = 0;
for (i = 1; i <= pv; i++) {
if (r[i] == '(')st[++top] = w[i];
else {
if (top && st[top] == w[i])top--;
else return false;
}
}
int cur = n;
for (i = 1; i <= top; i++) {
if (D[cur][st[i]] == -1)return false;
cur = cur - D[cur][st[i]] - 1;
if (cur < pv)return false;
}
return OK(pv, cur);
}
int main() {
//freopen("input.txt", "r", stdin);
int i, j;
scanf("%s", p + 1);
for (i = 1; p[i]; i++);
n = i - 1;
for (i = 1; i <= n; i++) {
w[i] = p[i] - 'a' + 1;
}
for (i = 0; i <= n; i++) {
Bef[i][0] = -1;
for (j = 0; j <= 26; j++)D[i][j] = -1;
D[i][w[i]] = 0;
if (!i)continue;
if (D[i - 1][w[i]] != -1) {
int L = D[i - 1][w[i]] + 2;
Bef[i][0] = i - L;
if(w[i-L]!=w[i])D[i][w[i - L]] = L;
for (j = 0; j <= 26; j++) {
if (D[i - L][j] != -1) {
if (D[i][j] == -1 || D[i][j] > D[i - L][j] + L)D[i][j] = D[i - L][j] + L;
}
}
}
}
for (i = 0; i < 19; i++) {
for (j = 1; j <= n; j++) {
if (Bef[j][i] == -1)Bef[j][i + 1] = -1;
else Bef[j][i + 1] = Bef[Bef[j][i]][i];
}
}
if (!Pos(0)) {
puts("-1");
return 0;
}
for (i = 1; i <= n; i++) {
r[i] = '(';
if (!Pos(i)) {
r[i] = ')';
}
}
printf("%s\n", r + 1);
}
Compilation message
match.cpp: In function 'int main()':
match.cpp:33:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%s", p + 1);
~~~~~^~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
248 KB |
Output is correct |
2 |
Correct |
2 ms |
356 KB |
Output is correct |
3 |
Correct |
2 ms |
392 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
248 KB |
Output is correct |
2 |
Correct |
2 ms |
356 KB |
Output is correct |
3 |
Correct |
2 ms |
392 KB |
Output is correct |
4 |
Correct |
3 ms |
664 KB |
Output is correct |
5 |
Correct |
3 ms |
664 KB |
Output is correct |
6 |
Correct |
8 ms |
808 KB |
Output is correct |
7 |
Correct |
8 ms |
840 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
248 KB |
Output is correct |
2 |
Correct |
2 ms |
356 KB |
Output is correct |
3 |
Correct |
2 ms |
392 KB |
Output is correct |
4 |
Correct |
3 ms |
664 KB |
Output is correct |
5 |
Correct |
3 ms |
664 KB |
Output is correct |
6 |
Correct |
8 ms |
808 KB |
Output is correct |
7 |
Correct |
8 ms |
840 KB |
Output is correct |
8 |
Correct |
93 ms |
1780 KB |
Output is correct |
9 |
Correct |
125 ms |
2112 KB |
Output is correct |
10 |
Correct |
112 ms |
2112 KB |
Output is correct |
11 |
Correct |
144 ms |
2112 KB |
Output is correct |
12 |
Execution timed out |
2039 ms |
12212 KB |
Time limit exceeded |
13 |
Halted |
0 ms |
0 KB |
- |