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 - 1return false;
        for (int i = 0; i < kl; i++) {
            if (b[bs - kl + i] != a[i]) return false;
        }
        bs -= kl;
    }
    if (!f) {
        if (cs <= kl - 1return 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

+ Recent posts