time limit: 10 sec memory limit: 128 mb
submit: 923 solved: 317
[submit][status]
輸入分為兩行,第一行為乙個整數
,表示字串的長度,第二行有
個連續的小寫的英文本元,表示字串的內容。
輸出檔案只有一行,即:輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出0。16
ggabaabaabaaball
12n<=500000
字串題解:好逗比的一道題。。。
先manacher一遍,然後比較暴力的思路就是列舉中心點,列舉這個字串的長度,然後判斷是否合法並更新答案。
果然會t 11s+
然後加了個最優性剪枝,當當前長度**:
1 #include2view code3 #include4
5 #include6
7 #include8
9 #include10
11 #include12
13 #include14
15 #include16
17 #include
1819 #include20
21 #include
2223
#define inf 1000000000
2425
#define maxn 1000000+5
2627
#define maxm 500+100
2829
#define eps 1e-10
3031
#define ll long long
3233
#define pa pair34
35#define for0(i,n) for(int i=0;i<=(n);i++)
3637
#define for1(i,n) for(int i=1;i<=(n);i++)
3839
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
4041
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
4243
#define mod 1000000007
4445
using
namespace
std;
4647 inline int
read()
4849
5455
while(ch>='
0'&&ch<='9')
5657
return x*f;
5859}60
intn,p[maxn];
61char
s[maxn],st[maxn];
6263
intmain()
6465
81int ans=0;82
for(int i=1;i<=n;i+=2)83
89 printf("
%d\n
",ans);
9091
return0;
9293 }
upd:看題解居然看到了並查集,splay。。。orzzzzzz
雙倍回文 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。首先由題意可知,只用考慮偶數長的回文串。這樣就不用插入 直...