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