題意
原題題目:生而爲人的目的是體驗生活百態,所以每個男孩的衣櫃裏都應該偷偷藏一套女裝
由於小A女裝的慾望日益強烈,並且他進隊的機率日益提升,已經到了 ,所以AlseoR提議準備給小A一個驚喜。機房人民集資買了 件衣服,編號爲 的衣服是小A最喜歡的女裝。
小A擺放物品時有個習慣,不喜歡打亂原先物品的位置,因此小A家的衣櫃只能從兩側打開,可以從左邊放衣服進去也可以從右邊放衣服進去,並且會把之前已經在衣櫃裏的衣服往中間擠。比如衣櫃裏面已經有 三件衣服了,現在從左邊放一件 號衣服進去就變成了 ,在右邊放一件 號女裝就變成了 。現在AlseoR帶着機房人民集資爲小A買的n件衣服潛入了小A的家,將衣服按編號從小到大放進衣櫃,每次可以任意選擇左側或者右側放入。
但是小A作爲一個強迫症,他希望可以存在一種方式從衣櫃兩側不斷取出衣服(取完爲止),每次可以任意選擇將左側的衣服或者右側的取出,第 件可以取出女裝。所以他想問問你方案的總數。由於小A不知道衣櫃裏面的衣服是怎麼擺放的,所以他只關心取出的順序。即對於兩個方案不同,當且僅當存在一個 ,兩個方案取出的第 件衣服編號是不同的。當然這個數可能很大,所以小A決定從他最喜歡的三個數中選一個給你當模數。
數據編號 | |||
---|---|---|---|
1 | 10 | 10 | 19260817 |
2 | 10 | 10 | 698786049962 |
3 | 5000 | 5000 | 698786049962 |
4 | 5000 | 5000 | 325497727 |
5 | 5000 | 5000 | 325497727 |
6 | 19260817 | ||
7 | 19260817 | ||
8 | 325497727 | ||
9 | 698786049962 | ||
10 | 698786049962 |
題解
直觀地考慮取出衣服的過程:一開始兩端有一段是,如果取出就轉化爲的問題,否則如果取出的另一端是,那麼按照從裏到外排列在另一端,即下一次取或者取,或者取的數。於是考慮DP:設爲中後面j個數不能取(i除外),取了次的方案數,答案即爲。
前綴和優化轉移是的,但發現由轉移過來,且轉移過程類似於作後綴和。由此想到組合意義,畫成路徑可發現。
此處必須吐槽一下部分分,沒有給樸素的DP應有的分,必須化成組合意義纔有分,而3,4,5三個點又誤導人往去想(實際上是方便求組合數),令選手十分自閉(雖然本質上是我弱智,沒有及時發現比較顯然的轉移規律)。
後面就是了,不會數論的我強行yy了一下,想錯了好幾次調了半天。大概就是把唯一分解,求出的值後合併一下。求的時候,先把中的倍數提出來,把它們各提取一個後遞歸下去算剩下的值,剩下不是的倍數的數可以按照分爲若干段,因爲這裏的對應的不會很大,直接預處理即可。