正题
题目大意
一个环,nnn个部分mmm个颜色求每段连续的都不同颜色的方案数。
解题思路
打表找一下规律发现
fi=fi−1∗(m−1)+fi−2∗(m−1)f_i=f_{i-1}*(m-1)+f_{i-2}*(m-1)fi=fi−1∗(m−1)+fi−2∗(m−1)
然后特征根:fi=(m−1)n+(m−1)∗(−1)nf_i=(m-1)^n+(m-1)*(-1)^nfi=(m−1)n+(m−1)∗(−1)n
当然也可以fi=mi−fi−1f_i=m^i-f_{i-1}fi=mi−fi−1
然后等比数列一下
codecodecode
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int XJQ=1e9+7;
ll n,m,ans;
ll power(ll x,ll b)
{if(!b) return 1;ll ans=1;while(b){if(b&1) ans=ans*x%XJQ;x=x*x%XJQ;b>>=1;}return ans;
}
int main()
{//freopen("color.in","r",stdin);//freopen("color.out","w",stdout);scanf("%lld%lld",&n,&m);printf("%lld",power(m-1,n)+(m-1)*power(-1,n));
}