51nod:相似字串
根據題意要求所有滿足題意的相似字串對數,相似字串對滿足a+c=c+b,進一步分析能得到a,b字串必須滿足a=d+e,b=e+d。
這時候只要構造滿足要求的a,b。
可以看出,a有k^n種情形,b只要根據a進行對應的變化就行(將a前後兩部分對調位置),不過可能出現重複情形。這時候只要想辦法剔除重複情形
,分析出現重複的情況,即f=g+h,i=h+g,f=i,可以發現這種情形下f=i是有迴圈節的字串。
字串的迴圈節有一些性質。
1. s字串若有長度為l的迴圈節p,則無論怎麼將s字串的前後2部分對調位置,變換後的字串仍然有長度為l的迴圈節p
2. s字串的最小迴圈節長度為l,則s字串的所有可能迴圈節長度均為l的倍數。
根據上面的性質,可以知道,對於固定的字串a,其最小迴圈節長度若為l,則對應的相似字串就有l種。
令f(p)為最小迴圈節為p的長度為n的字串個數
則最終結果公式為:
ans = sum
問題轉化為求f(p)最小迴圈節為p的長度為n的字串個數。
長度為n的字串總數k^n種,可以按照最小迴圈節長度進行分類,這幾類的字串集合之間必然兩兩沒有交集。可以列出下面公式:
sum=k^n
利用上面的公式,就能不斷遞推最終求得所有f(p)的值
程式實現流程為:
1.用線性篩素數法求得所有質數,得到n的所有質因子。
2.得到n的所有的因子,並按從小到大排序。
3.進行遞推,求得所有這些因子p的f(p)的值。
51nod 1317 相似字串對 容斥原理 數學
稱一對字串 a,b 是相似的,當且僅當滿足以下條件 1 字串a和b都恰好包含n個字元 2 a和b串中的每個字元都是小寫字母的前k個字元,即a b中只可能出現 a b c a k 1 這k個字元 3 存在乙個字串c,滿足 a c c b。這裡的 號表示字串間的鏈結,即str1 str2 str1str...
839 相似字串組
839.相似字串組 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts ...
839 相似字串組
難度困難93 如果交換字串x中的兩個不同位置的字母,使得它和字串y相等,那麼稱x和y兩個字串相似。如果這兩個字串本身是相等的,那它們也是相似的。例如,tars 和 rats 是相似的 交換0與2的位置 rats 和 arts 也是相似的,但是 star 不與 tars rats 或 arts 相似。...