记录编号 406274 评测结果 AAAAATTTTT
题目名称 鱼的感恩 最终得分 50
用户昵称 GravatarkZime 是否通过 未通过
代码语言 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;
    	}
    }