Niu Ke - Happy Brushing

Niu Ke - Happy Brushing

Link do tópico: Happy painting

Título

Existem n grades em cores M. É necessário descobrir o número correspondente de duas grades adjacentes com a mesma cor.

Ideias para resolução de problemas

Para entender quantos métodos de revestimento existem, é obviamente mnm ^ {n}mn , então, enquanto você encontrar todos os métodos de revestimento com cores adjacentes diferentes, poderá mostrar que há duas grades adjacentes com a mesma cor.
Como expressar a cor de qualquer grade adjacente? É muito simples que você pode escolher qualquer cor para a primeira grade, e se a cor da segunda grade for diferente daquela da grade anterior, existem apenas (m-1) cores para escolher, e assim por diante, um total de n *(m - 1) n - 1 (m-1) ^ {n-1}( m-1 )n - 1 método de revestimento.
Então você pode usar a potência rápida para calcularmnm ^ {n}mn ,(m - 1) n - 1 (m-1) ^ {n-1}( m-1 )n - 1 .
Código de upload

#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;
}

Acho que você gosta

Origin blog.csdn.net/qq_45964820/article/details/108950233
Recomendado
Clasificación