Oulipo
题目背景:
分析:裸的kmp直接上比较好
#include
#include
#include
#include
#include
#include
#include
using namespace std; int p[10010]; string s, t; int cas; void pre(string &s) { int len = s.size(); memset(p, 0, sizeof(p)); p[0] = -1; int j = -1; for(int i = 1; i < len; ++i) { while(j != -1 && s[i] != s[j + 1]) j = p[j]; if(s[i] == s[j + 1]) j++; p[i] = j; } } int match(string &s, string &t) { int cnt = 0; int len = t.size(); int j = -1; for(int i = 0; i < len; ++i) { while(j != -1 && t[i] != s[j + 1]) j = p[j]; if(s[j + 1] == t[i]) { j++; if(j == s.size() - 1) cnt++, j = p[j]; } } return cnt; } int main() { while(cin >> s) { if(s[0] == '.') break; int ans = 1; int len = s.size(); pre(s); if(len % (len - p[len]) == 0) ans = len / (len - p[len - 1]); cout << ans << '\n'; } return 0; }