題意
給你兩個串 問你第二個串的每個字尾在第乙個串出現的長度乘上次數 的和
思路: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,可以這樣考慮,要求從塔頂到塔底最大路徑之和,計算時可以考慮自底向上,走最後一步所選的數一定是塔底的某個值,向上退一層,對於倒數第二步,所走的是塔底往上一層較大的那個數,此時可以將倒數第二步所走的...