Csdn英雄會之平方子串行的個數

2021-06-22 04:39:10 字數 997 閱讀 6485

文章**:

題目:如果乙個非空的字串是兩個相同的字串連線而成,則稱它為平方的。例如aa是平方的,因為它是兩個a連線起來的。abab是平方的因為它是兩個ab連線起來的。而aaa和abba就不是平方的字串。給定乙個字串,你可以從中刪去任意多個字元(可以不刪),得到的是子串行,問最終結果有多少個不同的平方的字串。

考慮到最終結果比較大,輸出對1000000007取餘數後的結果。

例如:輸入abab,輸出3。因為aa,bb,abab是3個不同的平方字串。

這題的描述稍微有些歧義,有多少個不同的平方字串所說的這個不同,指的是字元位置的不同,而不是串本身的不同。比如:bbb,輸出結果應該是3,也就是說任意刪除乙個b,都算是一種不同的方案。

對於這題我的方法是dp + 容斥,乙個3次方的dp。大概思路就是列舉每乙個字元,作為平方字串的後半部分的開頭。那麼前後兩段共有多少相同的子串行。dp那部分同lcs(最長公共子串)類似。是個平方的演算法。所以整體是個3次方的演算法。

需要特殊講解一下的是如何去掉重複,某些串在列舉過程中可能會被重複計算,這裡我用的是容斥的方法。以當前字串作為後半部分的開頭,產生了多少個新的子串行呢?假設當前位置為i + 1,那麼dp一下0-i這段和i + 1 - end這段,有多少相同的子串行。但子串行的計算包括了不以i+1為開頭的序列。那麼再dp一下0-i和i + 2 - end這段有多少相同的子串行。用前者減去後者,就是以i + 1作為開頭的子串行的數量了。

using system;

using system.collections.generic;

namespace test

return (result % mod + mod) % mod;

}public static long cal(string str, int s1, int e1, int s2, int e2)

}return matrix[m, n];

}public static void main()

}}

直面CSDN上海英雄會的抱怨 這是乙個交流的盛會

9月5號在上海的英雄會結束了,見到了很多老朋友。對於這樣乙個平時為數不多的機會,他們當中大多數人還是非常歡迎的。然而,我也聽到了不少反面的聲音,不過基本上是對於會務安排的不滿,以及種種相關的批評。儘管在少數批評者當中有一些人顯得未免吹毛求疵,不過還是有不少朋友的建議很在點上。第一次見面的web 2....

子串行的個數(解) 英雄會

本題同樣來自caopengcs,只要你有興趣,每個人都可以出題 出題入口在主頁右側邊欄 貢獻題目 我要發布 內 以下是題目詳情 子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1 例如 4,14,2,3和14,1,2,3都...

祝CSDN的北京 英雄會 圓滿成功

4月6號,北京,csdn,第一次 it英雄會 瑞江兄很早之前就聯絡了我,直到前幾天,我還在看時間方面是否允許,還是非常希望能有機會去北京跟 只見其文,不聞其聲 的大家見面的,但近期的時間安排,不趕巧,沒能成行,辜負了瑞江的好意,也失去了一次跟大家見面的很好的機會.第一次上csdn,還是讀書的時候,那...