Best Reward 擴充套件kmp

2021-10-20 10:05:25 字數 1678 閱讀 7283

題目

題意乙個字串,由26個小寫英文本母組成, 每個字母都有各自的價值, 要你將乙個字串切成兩個子串, 總價值為兩個串價值和, 若是回文, 則串的價值為每個字母價值和, 否則為0,問最大價值多少。

思路將原串逆序,然後原串與逆序串相互ekmp匹配;對逆串列舉分割點,同時判斷逆串分隔的兩部分是否回文(根據extend陣列判斷),價值相加,迴圈取最大值

**

#include

#include

#include

#include

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#define x first

#define y second

#define best 131

#define inf 0x3f3f3f3f3f3f3f3f

#define inf 0x3f3f3f3f

#define pii pair

#define lowbit(x) x & -x

using

namespace std;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

double eps=

1e-7

;const

double pai=

acos(-

1.0)

;const

int n=

2e4+10;

const

int maxn=

1e6+10;

const

int mod=

1e9+7;

int t,n,m,k,cnt,tot;

int next1[maxn]

,next2[maxn]

,ext1[maxn]

,ext2[maxn]

,v[maxn]

,sum[maxn]

;//擴充套件kmp是用來求主串每個點可以向後延伸與模式串匹配的最長的長度

void

getnext

(string &s,

int next)

//模式串 }}

void

exkmp

(string &s,string &t,

int next,

int ext)

// t是主串,s是模式串 }}

intmain()

exkmp

(s1,s2,next1,ext1)

;//s1是模式串 s2是主串

exkmp

(s2,s1,next2,ext2)

;//s2是模式串 s1是主串

int ans=0;

for(

int i=

1;i) cout<

}return0;

}

Best Reward 擴充套件kmp

題目 題意乙個字串,由26個小寫英文本母組成,每個字母都有各自的價值,要你將乙個字串切成兩個子串,總價值為兩個串價值和,若是回文,則串的價值為每個字母價值和,否則為0,問最大價值多少。思路將原串逆序,然後原串與逆序串相互ekmp匹配 對逆串列舉分割點,同時判斷逆串分隔的兩部分是否回文 根據exten...

擴充套件kmp的應用 Best Reward

best reward 題意 給定乙個長度為n的字串,問你能否將這個字串分成兩個字串,如果分成的字串是回文子串,那麼就會有價值,求分成兩個串的最大價值。題解 學習到一手擴充套件kmp預處理後,o 1 就能判斷分成的兩個串是否為回文子串。s1為原串,s2為s1翻轉之後的串,然後你對s2求s1的ex陣列...

KMP 擴充套件KMP

本文將不斷加入例題,稍安勿躁,今天的總結爭取9 30寫完.kmp,中文名字叫字串匹配,用於解決一類字串匹配問題.先下一些定義 首先我們先想一想 nxt i 對於求解問題有怎樣的幫助.我們對於每乙個 t i s 1 的位置都匹配一次,這樣子複雜度為 theta n m 的.考慮在暴力匹配中其實我們不一...