반응형
https://www.acmicpc.net/problem/13506
#include <bits/stdc++.h>
#define MX 1'000'003
using namespace std;
bool check[MX];
char s[MX];
vector<int> getFail() {
int len = strlen(s);
vector<int> fail(len);
for (int j = 0, i = 1; i < len; i++) {
while (j > 0 && s[i] != s[j]) j = fail[j - 1];
if (s[i] == s[j]) fail[i] = ++j;
if (i != len - 1) check[j] = 1;
}
return fail;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> s;
vector<int> fail = getFail();
int len = strlen(s);
for(int i=fail[len-1]; i>0; i= fail[i-1]){
if(check[i]){
s[i] = 0;
cout << s << '\n';
return 0;
}
}
cout << -1 << '\n';
return 0;
}
반응형
'Algorithm > problem' 카테고리의 다른 글
백준 13392번 : 방법을 출력하지 않는 숫자 맞추기 - DP (0) | 2022.12.10 |
---|---|
백준 12920번 : 평범한 배낭 2 - 냅색 DP (0) | 2022.12.03 |
백준 1893번 : 시저 암호 - KMP (0) | 2022.12.01 |
백준 21924번 : 도시 건설 - MST, 크루스칼 (0) | 2022.11.30 |
백준 7575번 : 바이러스 - KMP (0) | 2022.11.30 |