來來來,日常水一篇(滑稽)
監獄有連續編號為1…n的n個房間,每個房間關押乙個犯人,有m種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄
輸入格式:
輸入兩個整數m,n.1<=m<=10^8,1<=n<=10^12
輸出格式:
可能越獄的狀態數,模100003取餘
輸入樣例#1:
2 3
輸出樣例#1:
66種狀態為(000)(001)(011)(100)(110)(111)
這題還是很坑的,我一開始正著想,一直在推各種奇怪的式子,結果wa了好幾次,最後迫不得已去看題解,結果發現這題要倒著想。。。
越獄情況數=總情況數-不越獄情況數
總情況數=mn
然後,不越獄只要滿足沒有相鄰的兩個相同就可以,也就是每乙個都和上乙個不同。
不越獄情況數=m∗
(m−1
)n−1
越獄情況數=mn
−m∗(
m−1)
n−1
#include
#define ll long long
using
namespace
std;
const ll p=100003;
ll m,n;
ll ksm(ll a,ll b,ll p)
a=(a*a)%p;
b>>=1;
}return ans;
}int main()
printf("%lld",ans%p);
return
0;}
洛谷 P3197 HNOI2008 越獄 題解
監獄有連續編號為 1 n 的 n 個房間,每個房間關押乙個犯人,有 m 種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就可能發生越獄,求有多少種狀態可能發生越獄。輸入兩個整數 m,n 可能越獄的狀態數,模 100003 取餘 輸入 1 2 3輸出 1 6種狀態為 000 001 0...
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...