1317 相似字串對

2021-07-07 09:08:14 字數 775 閱讀 6638

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 相似。...