原題來自:hnoi 2008
監獄有連續編號為 1 到 n 的 n 個房間,每個房間關押乙個犯人。有 m 種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人信仰的宗教相同,就可能發生越獄。求有多少種狀態可能發生越獄。
輸入兩個整數 m 和 n。
可能越獄的狀態數,對 100003取餘。
2 3
6
樣例說明所有可能的 6 種狀態為:,,,,,。
對於全部資料,1≤m≤10^8,1≤n≤10^12。
快速冪+組合計數這道題是正難則反,因為我們無法直接算出可能發生越獄的情況數,那就將總方案數減去不可能發生越獄的情況數
(一)總的情況數
每個房間都有m種可能,一共n個房間,所以總的情況數為
(二)不可能越獄的情況數
第乙個房間有m種可能
第二個房間不能和第乙個房間的宗教信仰一樣,有m-1種可能
第三個房間不能和第二個房間的宗教信仰一樣,有m-1種可能
以此類推,所以不可能發生越獄的情況數為:
(三)發生越獄的情況數
發生越獄的情況數為:
因為m和n都很大,所以總情況數和不可能越獄的情況數都用快速冪計算
#include#define mod 100003
#define ll long long
using namespace std;
ll quick_pow(int a,int b)
return ans;
} int main()
HNOI2008 越獄 組合數學
監獄有連續編號為 1 n 的 n 個房間,每個房間關押乙個犯人,有 m 種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄。輸入格式 輸入兩個整數 m,n 輸出格式 可能越獄的狀態數,模 100003取餘 輸入樣例 1 2 3輸出樣例 1 6種...
HNOI2008 越獄 (組合數學)
傳送門 應該是hnoi2008年最簡單的一道題了吧 簡單的組合數題,不過要換個思路。我們直接考慮發生越獄的情況似乎有點複雜,那我們換個思路,考慮不發生越獄的情況,也就是兩個有相同宗教的人不會坐在一起。第乙個人有m種宗教可以信仰,那麼第2個就只有m 1種了,不過我們發現,之後,第3個人其實還可以信仰m...
1008 HNOI2008 越獄 快速冪
監獄有連續編號為1.n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果 相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入兩個整數m,n.1 m 10 8,1 n 10 12 可能越獄的狀態數,模100003取餘 2 36 6種狀態為 000 00...