其他分享
首页 > 其他分享> > 1618:越狱

1618:越狱

作者:互联网

【题目描述】

原题来自:HNOI 2008

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

【输入】

输入两个整数 m 和 n。

【输出】

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

【输入样例】

2 3

【输出样例】

6

【提示】

样例说明

所有可能的 66 种状态为:{0,0,0},{0,0,1},{0,1,1},{1,0,0},{1,1,0},{1,1,1}。

数据范围与提示:

对于全部数据,1≤m≤108,1≤n≤1012 。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod=100003;
ll quickpow(ll a,ll b){
	ll sum=1;
	while(b){
		if(b%2==1){
			sum=(sum*a)%mod;
		}
		b/=2;
		a=(a*a)%mod;
	}
	return sum;
}
int main(){
//	freopen("input.txt","r",stdin);
//	freopen("output.txt","w",stdout);	
	ll n,m,ans=0;
	scanf("%lld %lld",&m,&n);
	printf("%lld",(quickpow(m,n)-quickpow(m-1,n-1)*m%mod+mod)%mod);
	return 0;
}

标签:1618,sum,越狱,quickpow,mod,ll,lld
来源: https://blog.csdn.net/weixin_43323172/article/details/97630086