1. 왼쪽에서 스택에 쌓다가 A를 찾으면 지운다
2. 오른쪽에서 스택에 쌓다가 A를 찾으면 지운다
3. 무한반복
모두 다 검사해도 750만밖에 안된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #include <stdio.h> #include <string.h> #include <queue> using namespace std; int len, kl, f = 1, l, r, bs, cs; char a[27], t[300002]; char b[300002], c[300002]; bool check() { if (f) { if (bs <= kl - 1) return false; for (int i = 0; i < kl; i++) { if (b[bs - kl + i] != a[i]) return false; } bs -= kl; } if (!f) { if (cs <= kl - 1) return false; for (int i = 0; i < kl; i++) { if (c[cs - 1 - i] != a[i]) return false; } cs -= kl; } return true; } int main() { scanf("%s", &a); scanf("%s", &t); len = strlen(t), kl = strlen(a); l = 0, r = len - 1; while (l<=r) { if (f) { b[bs++] = t[l]; if (t[l] == a[kl - 1] && check()) { f = 1 - f; } l++; } else { c[cs++] = t[r]; if (t[r] == a[0] && check()) { f = 1 - f; } r--; } } f = 1; if (cs) { while(cs--) { b[bs++] = c[cs]; if (b[bs - 1] == a[kl - 1]) check(); } } for (int i = 0; i < bs; i++) printf("%c", b[i]); return 0; } | cs |
'BOJ' 카테고리의 다른 글
1761 정점들의 거리 (0) | 2018.02.17 |
---|---|
11437 LCA (0) | 2018.02.17 |
2841 외계인의 기타 연주 (0) | 2018.02.17 |
3986 좋은 단어 (0) | 2018.02.17 |
14941 호기심 (0) | 2018.02.17 |