全部评论 3

  • %%%

    5天前 来自 广东

    0
  • #include <bits/stdc++.h>
    using namespace std;
    typedef unsigned long long ll;
    ll k = 131, mod = 1 << 31;
    char s[1000005];
    ll a[1000005];
    ll p[1000005];
    int main() {
    	p[0] = 1;
    	for (int i = 1; i <= 1e6; i++) {
    		p[i] = (p[i - 1] * k) % mod;
    	}
    	while (cin >> s + 1) {
    		if (s[1] == '.')
    			break;
    		int l = strlen(s + 1);
    		for (int i = 1; i <= l; i++) {
    			a[i] = (a[i - 1] * k + (ll)(s[i])) % mod;
    		}
    		for (int i = l; i >= 1; i--) { //个数
    			if (l % i == 0) {
    				ll e = l / i;//长度
    				ll f = 1;
    				//[1,e] [e+1,2*e] ,[2*e+1,3*e]
    				for (int j = e + 1; j + e - 1 <= l; j += e) {
    					//[1,e],[j,j+e-1]
    					ll num = (a[j + e - 1] - a[j - 1] * p[e]) % mod;
    					if (a[e] != num) {
    						f = 0;
    						break;
    					}
    				}
    				if (f == 1) {
    					cout << i << endl;
    					break;
    				}
    			}
    		}
    	}
    	return 0;
    }
    

    5天前 来自 北京

    0
  • 沙发

    5天前 来自 北京

    0

热门讨论