存在o(n)的演算法,學習了一下
**:
#include#include#includeusing namespace std;
const int maxn=300011;
int n,p[maxn];
char str[maxn],in[maxn];
int main()
str[0]='@';
str[1]='#';
n=n*2+2;
str[n]=0;
int maxid=0,id,ans=0;
for(int i=1;ii)
p[i]=min(p[2*id-i],maxid-i);
else
p[i]=1;
while(str[i+p[i]]==str[i-p[i]])
p[i]++;
if(p[i]+i>maxid)
ans=max(ans,p[i]);
} ans--;
printf("%d\n",ans);
}return 0;
}
HDU 3068 最長回文
題 目 鏈 接 看完後自己寫了一遍,感覺真的是很神奇的結論啊!本來這題看到可以用字尾陣列來寫的,但沒有學過,去看了一下,真心給暈了,決定找個機會認真研究下。我的 include include includeusing namespace std define min a,b a b a b cha...
HDU 3068 最長回文
problem description 給出乙個只由小寫英文本元a,b,c.y,z組成的字串s,求s中最長回文串的長度.回文就是正反讀都是一樣的字串,如aba,abba等 input 輸入有多組case,不超過120組,每組輸入為一行小寫英文本元a,b,c.y,z組成的字串s 兩組case之間由空行...
hdu 3068 最長回文
核心思路 rad i min rad 2 id i maxid i 其實很好理解,也就是假設你在id這個點匹配到maxid都是回文的。然後你現在搜尋的這個點i不超過maxid。那麼i關於id的對稱點2 id i 一定在id左邊。然後其實就是對稱點向左邊延伸,i向右邊maxid延伸。能延伸就說明是對稱...