码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj1008[HNOI2008]越狱

时间:2018-02-27 14:02:16      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:逆向   color   output   body   ace   选择   str   bzoj1008   algorithm   

传送门

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)

题解:

我们可以从逆向思考,对于每一种宗教,它的下一个位置有m-1种选择,因此不会越狱的情况有m*(m-1)^(n-1)种,总情况有m^n种,因此会越狱有m^n-m*(m-1)^(n-1)种,用快速幂即可求出答案。

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<cmath>
 7 #define ll long long
 8 #define mo 100003
 9 using namespace std;
10 ll m,n,ans;
11 ll qui(ll x,ll t){
12     ll a=1;x=x%mo;
13     while(t){
14         if(t&1)  a=a*x%mo;
15         x=x*x%mo;
16         t>>=1;
17     }
18     return a;
19 }
20 int main(){
21     scanf("%lld%lld",&m,&n);
22     ans=qui(m,n);
23     ll k=m*qui(m-1,n-1)%mo;
24     ans-=k;
25     while(ans<0)  ans+=mo;
26     ans%=mo;
27     printf("%lld\n",ans);
28     return 0;
29 }

 

bzoj1008[HNOI2008]越狱

标签:逆向   color   output   body   ace   选择   str   bzoj1008   algorithm   

原文地址:https://www.cnblogs.com/lazytear/p/8478294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!