您的位置:首页 > 其它

【BZOJ1008】【HNOI2008】越狱

2016-09-28 17:17 281 查看
以前水过的水题

原题:

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

1<=M<=10^8,1<=N<=10^12

稍用点组合数学的知识即可推出答案,不过我没看出来

#include<iostream>
#include<cstdio>
using namespace std;
long long num=100003;
long long n,m;
long long fast_mi(long long x,long long y)
{
long long z=1,base=x;
while(y)
{
if(y%2)
{
z=(z*base)%num;
}
base=(base*base)%num;
y>>=1;
}
return z;
}
int main()
{
cin>>m>>n;
long long ans=(fast_mi(m,n)-(m*fast_mi(m-1,n-1))%num)%num;
while(ans<0)
{
ans+=num;
}
cout<<ans<<endl;
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: