1468:OKR-Periods of Words
时间:2024-06-15 22:39
作者:admin
点击:次
#include bits/stdc++.husing namespace std;int n,j,ne[1000101];long long sum;string s;void get_next(){ for(int i=1;in;i++) { while (js[i]!=s[j]){ j=ne[j];} if(s[i]==s[j]){ j++;} ne[i+1]=j; }}int main(){ cinns; j=0; get_next(); for(int i=1;i=
#include <bits/stdc++.h>
using namespace std;
int n,j,ne[1000101];
long long sum;
string s;
void get_next(){
for(int i=1;i<n;i++) {
while (j&&s[i]!=s[j]){
j=ne[j];
}
if(s[i]==s[j]){
j++;
}
ne[i+1]=j;
}
}
int main(){
cin>>n>>s;
j=0;
get_next();
for(int i=1;i<=n;i++){
j=i;
while(j&&ne[j]){
j=ne[j];
}
if(ne[i]){
ne[i]=j;
}
sum+=i-j;
}
cout<<sum;
return 0;
}
(责任编辑:admin) |