题目描述
n个人排成一个环形,每个人要从c种颜色中选择一个。 牛牛希望相邻的人选择的颜色是不同的 问有多少种方案。 输出方案数对10007取模的结果。 人是有顺序的,环旋转同构算不同的方案。
输入描述:
输入只有一行,包含用空格分开的两个整数,表示n和c。
输出描述:
输出一行一个整数,表示答案。
示例1
输入
4 3
输出
18
示例2
输入
1000000000 100
输出
726
说明
对10007取模。
备注:
对于所有数据: 3 <= n <= 1000000000, 3 <= c <= 10020分: c <= 340分: c <= 470分: n <= 10000
#include<bits/stdc++.h>
using namespace std;
const int mod=10007;
int qpow(int a,int b)
{
int ans=1;
while(b)
{
if(b&1)
ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
int main()
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int n,m,ans;
cin>>n>>m;
m--;
ans=qpow(m,n);
if(n&1)
ans-=m;
else
ans+=m;
ans=(ans+mod)%mod;
cout<<ans<<endl;
return 0;
}
来源:nkw