[BZOJ1008]越狱

题目描述

监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果 相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱

输入格式

输入两个整数M,N.1<=M<=10^8 ——1<=N<=10^12

输出格式

可能越狱的状态数,模100003取余

输入样例

2 3

输出样例

6

【样例解释】

6种状态为(000)(001)(011)(100)(110)(111)

主要思路

本蒟蒻认为正着分析有点难,那么反着分析,可知一共有 m^n 种搭配方法,当不起冲突时,第一个监狱有m种方案,第二个有(m-1)种方案……故一共有m*(m-1)^(n-1) 种方法不起冲突,所以答案是(m^n -m*(m-1)^(n-1))%100003,好了,一道快速幂板子题。时间:20ms。

为了防止答案为负号,就在式子中加一个mod——QAQ ——————AC代码

#include<bits/stdc++.h>
using namespace std;
long long n,m,mod=100003;
long long pow(long long x,long long y){
    if(y==1)return x%mod;
	long long t=pow(x,y/2);
	if(y%2)t=t*t*x%mod;
	else t=t*t%mod;
	return t;
}
int main(){
    scanf("%lld%lld",&m,&n);
    printf("%lld",m*((pow(m,n-1)-pow(m-1,n-1)+mod)%mod)%mod);
}
posted @ 2021-01-23 14:52  蒟蒻orz  阅读(1)  评论(0编辑  收藏  举报  来源