rt,感觉自己分析得跟 √10 没啥区别。请问具体的分析方法是什么。
举例:关于 Manacher 算法,如下板子代码为什么是 O(n) 的?(马蜂不好,轻喷)
#include<bits/stdc++.h>
using namespace std;
char a[11000005],s[22000005],dui[500];
long long n,k,ans=1,P[22000005],cnt=0;
inline void Manacher(){
long long r=0,c;
for(int i=1;i<n;i++){
if(i>=r){
P[i]=1;
}
else{
P[i]=min(P[2*c-i],r-i);
}
while(s[i+P[i]]==s[i-P[i]]){
P[i]++;
cnt++;
}
if(i+P[i]>r){
r=i+P[i];
c=i;
}
}
}
int main(){
// cin>>n;
scanf("%s",a);
s[k++]='S';
s[k++]='$';
n=strlen(a);
for(int i=0;i<n;i++){
s[k++]=a[i];
s[k++]='$';
}
s[k++]='B';
n=k;
Manacher();
// cout<<cnt<<endl;
for(int i=0;i<n;i++){
ans=max(ans,P[i]);
}
cout<<ans-1;
}