監獄有連續編號為 \(1…n\) 的 \(n\) 個房間,每個房間關押乙個犯人,有 \(m\) 種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄。
輸入兩個整數 \(m,n\)
可能越獄的狀態數,模 \(100003\) 取餘
輸入 #1
2 3輸出 #1
6種狀態為(000)(001)(011)(100)(110)(111)
\(1 \le m \le 10^8\)
\(1 \le n \le 10^\)
組合數學 + 快速冪
n個房間裡面都有犯人,他們信仰m種不同的宗教
求有至少一對信仰相同宗教的人挨在一起的情況
正著求是很難求或者是沒有辦法求的
所以正難則反
沒法直接求出來越獄的情況
那就求出總的情況和不越獄的情況
用總的情況減去不越獄的情況
就是題目要求我們求的越獄的情況
總的情況
每乙個房間都有m中可能,一共有n個房間
所以可能性是m^n次方
總的情況就知道了
然後看不會越獄的情況
第乙個房間可以有m中選擇
第二個房間不能和第乙個房間的宗教一樣『
所以只有m-1中可能
第三個也是和第二個一樣
所以出現了乙個m和n-1個m-1
那麼不會越獄的情況就是m*(m-1)^(n-1)
知道了這兩個
一做差就可以求出來會越獄的情況了
冪運算很大需要用快速冪
#include#include#define int long long
using namespace std;
const int mo = 100003;
int p(int a,int b)
b /= 2;
a = ((a % mo) * (a % mo)) % mo;
} return ans;
} signed main()
洛谷 P3197 HNOI2008 越獄
來來來,日常水一篇 滑稽 監獄有連續編號為1 n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄 輸入格式 輸入兩個整數m,n.1 m 10 8,1 n 10 12 輸出格式 可能越獄的狀態數,模1000...
P3197 HNOI2008 越獄 題解
監獄有 n 個房間,每個房間關押乙個犯人,有 m 種宗教,每個犯人會信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄。答案對 100,003 取模。輸入只有一行兩個整數,分別代表宗教數 m 和房間數 n 輸出一行乙個整數代表答案。輸入 1 2 3輸出 1 6樣例...
P3197 HNOI2008 越獄(快速冪)
監獄有連續編號為 1 n1 n1 n 的 nnn 個房間,每個房間關押乙個犯人,有 mmm 種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄。輸入格式 輸入兩個整數 m,nm,nm,n 輸出格式 可能越獄的狀態數,模 100003100003...