玉米田 组合数学 环涂色

玉米田
时间限制: 1 Sec 内存限制: 128 MB

题目描述
玉米中学的学生社会实践的内容是去玉米田中种玉米。

玉米中学有n块不同的玉米田,这些玉米田编号从1到n,且第i号玉米田与第i+1号玉米田相邻,特殊地,第n号玉米田与第1号玉米田相邻。

现在玉米中学购置了k种不同的玉米,为了美观,学校要求相邻的玉米田中不能种植同一种玉米,现在W某想要知道种植玉米的方案总数。

由于W某耐心有限,因此只需要你求出对20011021取模后的结果即可。
输入
一行两个整数n,k,表示玉米田的数量和玉米的种类数。
输出
一行一个整数,表示种植玉米的方案数对20011021取模后的结果。
样例输入 Copy
【样例1】
4 2
【样例2】
4 3
样例输出 Copy
【样例1】
2
【样例2】
18
提示
样例1解释
设2种玉米为a,b
2种种植玉米的方案为:abab,baba

所有数据满足:n,k≤109

设m个不同颜色涂给n个区域
直接套上公式 (m - 1) ^ n + (m - 1) * (-1) ^ n

大佬博客

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define X first
#define Y second
using namespace std;
 
typedef long long LL;
typedef pair<int,int> PII;
 
const int N=1000010,mod=20011021,INF=0x3f3f3f3f;
const double eps=1e-6;
 
LL n,k;
 
LL qmi(LL a,LL b)
{
    LL res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return res%mod;
}
 
int main()
{
//  ios::sync_with_stdio(false);
//  cin.tie(0);
 
    cin>>n>>k;
     
    LL ans=((k-1)*qmi((LL)-1,n)%mod+qmi(k-1,n))%mod;
     
    cout<<ans<<endl;
 
 
 
    return 0;
}
 

你可能感兴趣的:(组合数学)