链接:https://ac.nowcoder.com/acm/contest/3211/C
题目描述
n个人排成一个环形,每个人要从c种颜色中选择一个。
牛牛希望相邻的人选择的颜色是不同的
问有多少种方案。
输出方案数对10007取模的结果。
人是有顺序的,环旋转同构算不同的方案。
输入描述:
输入只有一行,包含用空格分开的两个整数,表示n和c。
输出描述:
输出一行一个整数,表示答案。
示例1
输入
4 3
输出
18
示例2
输入
1000000000 100
输出
726
说明
对10007取模。
备注:
对于所有数据: 3 <= n <= 1000000000, 3 <= c <= 100
20分: c <= 3
40分: c <= 4
70分: n <= 10000
代码:
#include <bits/stdc++.h>
using namespace std;
long long n,c;
long long 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()
{
cin>>n>>c;
long long s;
s=qpow(c-1,n);
if(n%2==0)
s+=c-1;
else
s-=c-1;
cout<<s%mod;
}