BZOJ2342 Shoi2011 雙倍回文

2022-05-12 01:48:13 字數 1665 閱讀 5655

time limit: 10 sec  memory limit: 128 mb

submit: 923  solved: 317

[submit][status]

輸入分為兩行,第一行為乙個整數

,表示字串的長度,第二行有

個連續的小寫的英文本元,表示字串的內容。

輸出檔案只有一行,即:輸入資料中字串的最長雙倍回文子串的長度,如果雙倍回文子串不存在,則輸出0。16

ggabaabaabaaball

12n<=500000

字串題解:好逗比的一道題。。。

先manacher一遍,然後比較暴力的思路就是列舉中心點,列舉這個字串的長度,然後判斷是否合法並更新答案。

果然會t 11s+

然後加了個最優性剪枝,當當前長度**:

1 #include2

3 #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 }

view code

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。首先由題意可知,只用考慮偶數長的回文串。這樣就不用插入 直...