time limit: 10 sec memory limit: 128 mb
submit: 1915 solved: 713
[submit][status][discuss]
輸入分為兩行,第一行為乙個整數,表示字串的長度,第二行有個連續的小寫的英文本元,表示字串的內容。
輸出檔案只有一行,即:輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出0。16
ggabaabaabaaball
12n<=500000
演算法太神以至於看不懂,先存下**
1 #include2 #include3 #include4 #include5 #include6 #include7using
namespace
std;
8const
int mxn=800010;9
intp[mxn],q[mxn];
10int
len,ans;
11char
s[mxn];
12set
t;13int cmp(int a,int
b)16
void
manacher()
26return;27
}28intmain()
41set
::iterator tmp=t.upper_bound(i+p[i]/2
);42
if(tmp!=t.begin())ans=max(ans,(*--tmp-i)*4
);43
}44 printf("
%d\n
",ans);
45return0;
46 }
雙倍回文 Shoi2011 bzoj2342
time limit 10 sec memory limit 128 mb submit 2820 solved 1088 submit status discuss 輸入分為兩行,第一行為乙個整數,表示字串的長度,第二行有個連續的小寫的英文本元,表示字串的內容。輸出檔案只有一行,即 輸入資料中字串...
bzoj 2342 Shoi2011 雙倍回文
題目大意 演算法一 因為雙倍回文串必定是乙個回文串 所以先用manachar求出每個點能夠擴充套件出的最長的回文串長度f i 再列舉對稱軸x,對於y只要滿足y f y x y x f x 2,就可以用len x,y 4來更新答案 對於每個x,只需要用距離其最遠的滿足條件的y來更新即可 將其按i f ...
SHOI2011 bzoj2342 雙倍回文
description input 輸入分為兩行,第一行為乙個整數,表示字串的長度,第二行有個連續的小寫的英文本元,表示字串的內容。output 輸出檔案只有一行,即 輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出0。首先由題意可知,只用考慮偶數長的回文串。這樣就不用插入 直...