记录编号 |
406274 |
评测结果 |
AAAAATTTTT |
题目名称 |
鱼的感恩 |
最终得分 |
50 |
用户昵称 |
kZime |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
5.152 s |
提交时间 |
2017-05-18 11:15:53 |
内存使用 |
0.84 MiB |
显示代码纯文本
# include <bits/stdc++.h>
# define MAXN 110000
using namespace std;
char c[MAXN];
inline string get_str() {
scanf("%s", c);
return (string) c;
}
int n, ne[MAXN];
inline void get_ne(string st) {
for(int k = 0; k < st.size(); k++) {
string tmp = st.substr(0, k + 1);
for(int i = 1; i < k; i++)
if(tmp.substr(0, i) == tmp.substr(k + 1 - i, i))
ne[k] = i;
}
}
inline bool KMP(string str, string st) {
memset(ne, 0, sizeof(ne));
get_ne(st);
int len = st.size();
for(int i = 1, j; i <= str.size() - 1 - len; i++) {
for(j = 0; j < len; j++) if(str[i + j] != st[j]) break;
if(j == len) return 1;
else i += ne[j];
}
return 0;
}
int main() {
freopen("fool.in", "r", stdin);
freopen("fool.out", "w", stdout);
cin >> n;
while(n--) {
string str = get_str();
int len = str.size();
bool flag = 0;
for(int i = len - 1; i >= 1; i--) {
string a = str.substr(0, i), b = str.substr(len - i, i);
//cout << a << " " << b << endl;
if(a == b) {//鍓嶇紑绛変簬鍚庣紑
if(KMP(str, a)) {
flag = 1;
cout << a << endl;
break;
}
}
}
if(!flag) cout << "---" << endl;
}
}