蒜頭君有 n 只氣球,蒜頭君把氣球排成一排。初始時,氣球都是白色,現在蒜頭君想用 m 種顏色給氣球塗色,如果相鄰的氣球的顏色相同,這 2 個氣球會發生消消樂,蒜頭君希望你求出會發生消消樂的塗色方法有多少種。最後答案對 10^9+7取模。
輸入格式
輸入兩個整數n(1<=n<=1012),m(1<=m<=108)
輸出格式
輸出一行表示答案。
樣例輸入
3 4樣例輸出
28可消的方案數=總方案數-不可消的方案數
這裡我們講重點二分快速冪
遞迴法:
int
pow(
int a,
int b)
原理:
當b是偶數時: a^b = (a^(b/2) )^2
當b是奇數時:a^b = (a^(b-1)/2 )^2*a
迴圈法:
int
pow(
int a,
int b)
rturn res;
}
原理:
a^7 = a^1 * a^2 * a^4
------7的二進位制為 111
a^18 = a^2 * a^16
------18的二進位制為10010
仔細瞧瞧就可以發現7=1+2+4,18=2+16
#include
using namespace std;
typedef
long
long ll;
const ll mod=
1e9+7;
ll pow_mod
(ll a,ll b)
return res;
}int
main()
二分查詢 快速冪 計蒜客 氣球消消樂2
問題描述 蒜頭君有 n 只氣球,蒜頭君把氣球排成一排。初始時,氣球都是白色,現在蒜頭君想用 m 種顏色給氣球塗色,如果相鄰的氣球的顏色相同,這 2 個氣球會發生消消樂,蒜頭君希望你求出會發生消消樂的塗色方法有多少種。最後答案對 10 9 7取模。輸入輸出 輸入兩個整數n 1 n 10 12 m 1 ...
二分 快速冪 氣球消消樂
問題描述 蒜頭君有 n 只氣球,蒜頭君把氣球排成一排。初始時,氣球都是白色,現在蒜頭君想用 m 種顏色給氣球塗色,如果相鄰的氣球的顏色相同,這 2 個氣球會發生消消樂,蒜頭君希望你求出會發生消消樂的塗色方法有多少種。最後答案對 10 9 7取模。輸入格式 輸入兩個整數n 1 n 10 12 m 1 ...
計蒜客 1562 二分查詢
蒜頭君手上有個長度為 nn 的陣列 aa。由於陣列實在太大了,所以蒜頭君也不知道陣列裡面有什麼數字,所以蒜頭君會經常詢問在陣列 aa 中,比 xx 大的最小值是多大?但是這次蒜頭君要求這個數字必須大於 xx,不能等於 xx。輸入格式 第一行輸入兩個整數 nn 和 mm,分別表示陣列的長度和查詢的次數...