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