Scarlet的字串不可能這麼可愛

2022-09-09 00:57:24 字數 1784 閱讀 7947

scarlet妄圖構造字符集為kkk,長度為lll的字串,滿足沒有任何乙個長度超過111的回文連續子串。

看起來這樣的字串太多了,scarlet隨手加了個限制:她指定了字串的第sss位為www。

這下scarlet不會做了,請你來幫她計算究竟有多少滿足條件的字串。按照套路,你只要求出答案對ppp取模後的結果。

第一行三個整數k,lk,lk,l和ppp,分別表示構造的字串的的字符集、長度和模數。

第二行兩個整數s,ws,ws,w,描述scarlet給的限制。

注意:s=0s=0s=0表示該資料點中scarlet十分良心地沒有新增限制

一行乙個整數,表示答案對ppp的取模後的結果。

輸入 #1

3 3 233

1 1

輸出 #1

2
【解題思路】

假設字符集大小為444,長度為555,如果沒有限制的話,很明顯,答案為4∗3∗2∗2∗2=964*3*2*2*2=964∗3∗2∗2∗2=96,因為我們要求乙個沒有回文串的字串,所以乙個位置會對後面兩位進行限制,也就是說第一位可以用kkk種,但是第二位就會因為前面乙個位置的限制而少掉111種字元的使用,然後從第三位開始一直是k−2k-2k−2種了。

至此我們得出結論,當s==0s==0s==0,k>=2k>=2k>=2、l>=2l>=2l>=2時,ans=k∗(k−1)∗(k−2)l−2ans=k*(k-1)*(k-2)^ans=k∗(k−1)∗(k−2)l−2(當然,000^000還是不行滴)

如果指定字元呢?其實也沒有什麼大不了的,在前面我們可以發現每乙個字元會對後兩位進行限制,那麼這個指定的字元只是會對前後兩位有限制,

比如上方原本的例子,原來是4∗3∗2∗2∗24*3*2*2*24∗3∗2∗2∗2,我們可以先假設它限制的是111~555中的一位,再進行計算,結果如下

第一位:x∗3∗2∗2∗2x*3*2*2*2x∗3∗2∗2∗2

第二位:3∗x∗2∗2∗23*x*2*2*23∗x∗2∗2∗2

第三位:3∗2∗x∗2∗23*2*x*2*23∗2∗x∗2∗2

而第四第五種事實上是等價於第一第二種的,由此我們得出結論,在有限制條件的情況下,ans=(k−1)∗(k−2)l−2ans=(k-1)*(k-2)^ans=(k−1)∗(k−2)l−2

那麼我們只需要判斷有沒有限制字元,再直接計算即可,值得注意的是,我們這裡需要用到快速冪,且一開始就需要對kkk取餘,否則就會wawawa掉。

【code】

1 #include2

#define ll long long

3using

namespace

std;

4 ll k,l,mod,s,w,ans=1

;5 ll poww(ll a,ll b)//

快速冪6

15return

sum;16}

17int

main()

1826

if(s) ans=ans*(k-1)%mod;

27else ans=ans*k*(k-1)%mod;//

根據有沒有指定字元進行分別計算

28 k-=2

;29 ans=(ans*poww(k,l-2))%mod;

30 printf("

%lld

",ans);//

輸出答案

31return0;

32 }

Scarlet的字串不可能這麼可愛

首先考慮沒有限制合法字串 乙個很顯然的結論就是,對於乙個回文字串,如果長度為奇數的話,則必定包含乙個長度為3的回文串 若長度為偶數的話,則必定包含乙個長度為2的回文串。也就是說對於l 3且k 3的情況,我們只需考慮對於每乙個位置的字元,使它一定不和前兩位字元相同即可。根據數學知識可知 一共有k k ...

不是不可能的

今天在網上看到了四川的災情,已經有5萬5千多人遇難了,真的很難過,也真的很震撼,心理 突然萌生一種思想,我能為災區做什麼,我能做什麼,捐錢,我能捐多少啊,捐血我又能捐多 少啊,我是上帝的女兒,我能拯救這世人嗎,我能嗎,上帝已經給了我這責任,給了我,自從 上帝打算揀選我那天開始,我必須要做好,我要先從...

會這13招,找不到客戶不可能!

怎樣找貨?怎樣找貨即怎樣找客戶。找客戶的辦法很多,但歸納起來只有四個字即 廣告 和 關係 廣告 是找客戶的前提,關係 是得到客戶的基礎,而 服務 則是鞏固客戶和擴大市場的關鍵。這裡先談 廣告 的方法型別 一 順向廣告法 即在發貨方找客戶,用信函 報紙 電視 書刊等 在生產企業,及經營公司所在地投放廣...