HDOJ 6153 KMP NEXT陣列昇華

2021-09-28 05:03:18 字數 900 閱讀 3828

題意

給你兩個串 問你第二個串的每個字尾在第乙個串出現的長度乘上次數 的和

思路:1.每次找最長的符合的位置通過遞推來找

2.next陣列的預處理

#include using namespace std;

const int maxn = 2000005;

const long long mod = 1000000007;

char str1[maxn],str2[maxn],str[maxn];

int f[maxn];

long long res[maxn];

int f2[maxn];

void get_fail( char* p,int *f )

}int main()

for( int i = l1-1;i >= 0;i-- )

reverse( str2,str2+l2 );

str[len++] = '\0';

len--;

get_fail( str,f );

get_fail( str2,f2 );

long long ans = 0;

int p = 0;

for( int i = l2;i < len;i++ )

else while( p != -1 && str[p+1] != str[i] ) p = f[p];

if( str[p+1] == str[i] ) p++;

while( p != -1 && (p >= l2 || i-p < l2) ) p = f[p];

ans = (ans+res[p])%mod;

}printf("%lld\n",ans);

}return 0;

}

hdoj 水仙花數

problem description 春天是鮮花的季節,水仙花就是其中最迷人的代表,數學上有個水仙花數,他是這樣定義的 水仙花數 是指乙個三位數,它的各位數字的立方和等於其本身,比如 153 1 3 5 3 3 3。現在要求輸出所有在m和n範圍內的水仙花數。input 輸入資料有多組,每組佔一行,...

HDOJ2084數塔問題

problem description在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 o o 圖貌似沒有複製上,不想傳了,一搜hdoj2084就都知道了 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的...

HDOJ2084數塔問題

數塔問題 題目要求從頂層走到底層,若每一步只能走到相鄰的結點,求經過的結點的數字之和最大值。很經典的dp,可以這樣考慮,要求從塔頂到塔底最大路徑之和,計算時可以考慮自底向上,走最後一步所選的數一定是塔底的某個值,向上退一層,對於倒數第二步,所走的是塔底往上一層較大的那個數,此時可以將倒數第二步所走的...