Niu Ke—ハッピーブラッシング

Niu Ke—ハッピーブラッシング

トピックリンク:ハッピーペインティング

題名

n個のグリッドとm個の色があります。同じ色の2つの隣接するグリッドの一致する数を見つける必要があります。

問題解決のアイデア

コーティング方法がいくつあるかを理解するには、明らかにmnm ^ {n}です。mnの場合、隣接する色が異なるすべてのコーティング方法を見つければ、同じ色の隣接するグリッドが2つあることを示すことができます。
隣接するグリッドの色を表現するにはどうすればよいですか?最初のグリッドに任意の色を選択できるのは非常に簡単です。2番目のグリッドの色が前のグリッドの色と異なる場合は、(m-1)色しか選択できません。合計n *(m − 1)n − 1(m-1)^ {n-1}m1 N - 1つのコーティング方法。
次に、高速電力を使用してmnm ^ {n}を計算できますmn(m − 1)n − 1(m-1)^ {n-1}m1 N - 1
コードをアップロード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
ll fastpow(ll a , ll n){
	ll res = 1, base = a % mod;//这里一定要取mod因为m可能会大于mod
	while(n){
		if(n & 1)
			res = (res * base) % mod;
		base = (base * base) % mod;
		n >>= 1;
	}
	return res;
}
int main(){
	ll n, m, x, y, ans;
	cin >> n >> m;
	x = fastpow(m, n) % mod;
	y = (m % mod * fastpow(m - 1, n - 1)) % mod;
	if(x - y > 0)//因为取mod了,所以有可能x < y ,小于的话加一个mod就ok
		ans = (x - y) % mod;
	else
		ans = (x - y + mod) % mod;
	cout << ans << endl;
	return 0;
}

おすすめ

転載: blog.csdn.net/qq_45964820/article/details/108950233