51nod1733 提取子串

2021-10-21 17:57:15 字數 1296 閱讀 7821

題目鏈結

先用kmp求出t能出現在s的哪些位置。

我們維護這樣的三個dp方程:

dp1[i]表示 最後乙個區間結尾r在i的方案數。

dp2[i]表示 最後乙個區間結尾r在[0…i]的方案數。

dp3[i]表示 最後乙個區間開頭l在[0…i]的方案數。

轉移即可,dp2[n]即為答案。

複雜度o(n

)o(n)

o(n)

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n =

1e5+

100;

const

int mod =

1e9+7;

int n, m;

int nex[n]

;char s1[n]

, s2[n]

;void

getnex

(char

*str,

int n)

else

j = nex[j];}

}vector<

int> v;

int dp1[n]

, dp2[n]

, dp3[n];/*

dp1[i] 表示r以i結尾的區間個數

dp2[i] 表示r以0...i結尾的區間個數

dp3[i] 表示l在0...i的區間個數

*/void

upd(

int&a,

int b)

intmain()

else

j = nex[j];}

if(v.

size()

==0) dp1[0]

= dp2[0]

=1;int ans =0;

for(

int i =

1, j =

0; i <= n; i++

) dp2[i]

=(dp2[i -1]

+ dp1[i]

)% mod;

}printf

("%d\n"

, dp2[n]-1

);return0;

}

51nod 1088 最長回文子串

回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000 output 輸出最長回文子串的長度l。input示例 daabaacoutput示例 5 解法一 暴力列舉所有串 若當前列舉串...

51 nod 1088 最長回文子串

1088 最長回文子串 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 收藏 關注 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000 output 輸...

51Nod 1088 最長回文子串

1088 最長回文子串 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 回文串是指aba abba cccbccc aaaa這種左右對稱的字串。輸入乙個字串str,輸出str裡最長回文子串的長度。input 輸入str str的長度 1000 output 輸出最長回文子...