BZOJ 1008 [HNOI2008] 越狱

来源:互联网 发布:vb winsock 编辑:程序博客网 时间:2024/04/30 01:35

Description

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

Input

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

Output

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

Sample Input

2 3

Sample Output

6

HINT

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

Source

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

数论+快速幂~

求有相邻格子颜色相同的种类数,相当于是求总数减去没有格子相邻的种类数,总数是n^m,而没有格子相邻的种类数是n*(n-1)^(m-1),相当于除第一个格子外,每一个格子都与前一个格子颜色不同~

主要的是取模,每一个都要取,否则就会出错~


#include<cstdio>#define ll long long#define modd 100003ll n,m,k1,k2;ll mi(ll u,ll v){ll kkz=u%modd,now=1;while(v){if(v&1) now=(now*kkz%modd);kkz=kkz*kkz%modd;v>>=1;}return now;}int main(){scanf("%lld%lld",&m,&n);ll kkzv=(mi(m,n)-(m%modd*mi(m-1,n-1)%modd)+modd)%modd;printf("%lld\n",kkzv);return 0;}


1 0
原创粉丝点击