問題描述:
蒜頭君有 n 只氣球,蒜頭君把氣球排成一排。初始時,氣球都是白色,現在蒜頭君想用 m 種顏色給氣球塗色,如果相鄰的氣球的顏色相同,這 2輸入輸出:個氣球會發生消消樂,蒜頭君希望你求出會發生消消樂的塗色方法有多少種。最後答案對 10^9+7取模。
輸入兩個整數n(1<=n<=10^12 ) ,m(1<=m<=10 ^12) 輸出一行表示答案。解法:樣例輸入
3 4樣例輸出
28
一開始想的是怎麼正面算,。。。
原來這題考的是 簡單組合排序。
先求出不發生消消樂的情況數,用總的情況數減去即可。
不發生消消樂情況數:=m∗(m−1)^n−1
(第乙個有m種塗法,往後每乙個有m-1種塗法)。
總數=mn;
.可得 答案= mn−m∗(m−1)n−1
因為n的範圍為10^12所以使用快速冪。
因為m的範圍為10^12所以使用快速乘。
最後注意取模的時候 需要加上乙個mod再取模,要不然會出現負數的情況。
**:
#includeusing namespace std;
typedef long long ll;
ll mod = 1e12+7;
ll n,m;
ll pow_mul(ll a,ll b)
a = (a+a) %mod;
b >>= 1;
}return ress;
}ll pow_mod(ll a,ll b)
// 超過 long long
// a = (a*a) %mod;
a = pow_mul(a,a);
b >>= 1;
}return res;
}int main()
氣球消消樂 計蒜客(二分快速冪)
蒜頭君有 n 只氣球,蒜頭君把氣球排成一排。初始時,氣球都是白色,現在蒜頭君想用 m 種顏色給氣球塗色,如果相鄰的氣球的顏色相同,這 2 個氣球會發生消消樂,蒜頭君希望你求出會發生消消樂的塗色方法有多少種。最後答案對 10 9 7取模。輸入格式 輸入兩個整數n 1 n 1012 m 1 m 108 ...
二分 快速冪 氣球消消樂
問題描述 蒜頭君有 n 只氣球,蒜頭君把氣球排成一排。初始時,氣球都是白色,現在蒜頭君想用 m 種顏色給氣球塗色,如果相鄰的氣球的顏色相同,這 2 個氣球會發生消消樂,蒜頭君希望你求出會發生消消樂的塗色方法有多少種。最後答案對 10 9 7取模。輸入格式 輸入兩個整數n 1 n 10 12 m 1 ...
計蒜客 1562 二分查詢
蒜頭君手上有個長度為 nn 的陣列 aa。由於陣列實在太大了,所以蒜頭君也不知道陣列裡面有什麼數字,所以蒜頭君會經常詢問在陣列 aa 中,比 xx 大的最小值是多大?但是這次蒜頭君要求這個數字必須大於 xx,不能等於 xx。輸入格式 第一行輸入兩個整數 nn 和 mm,分別表示陣列的長度和查詢的次數...