标准题解
2026-02-03 11:27:17
发布于:广东
3阅读
0回复
0点赞
建议改题太简单了
#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
const int N = 1e6 + 10;
ull P = 13331;
ull h[N];
ull p[N];
int n;
ull get(int l,int r){
return h[r] - h[l - 1] * p[r - l + 1];
}
bool check(int x){
if(n % x != 0) return false;
if(n == x) return true;
ull tag = h[x];
for(int i = x + x;i <= n;i+= x){
ull t1 = get(i - x + 1,i);
if(t1 != tag) return false;
}
return true;
}
void solve(){
while(true){
string s;
cin >> s;
if(s == ".") break;
n = s.size();
s = " " + s;
p[0] = 1;
h[0] = 0;
for(int i = 1;i <= n;i++){
p[i] = p[i - 1] * P;
h[i] = h[i - 1] * P + s[i];
}
for(int i = 1;i <= n;i++){
if(check(i)){
cout << n / i << endl;
break;
}
}
}
}
int main(){
solve();
return 0;
}
这里空空如也







有帮助,赞一个