P3197 [HNOI2008]越狱

Posted five20

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P3197 [HNOI2008]越狱相关的知识,希望对你有一定的参考价值。

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1: 
2 3
输出样例#1: 
6

说明

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

 

Solution:

考虑到直接计算存在越狱情况很复杂(不要问为什么),而总的排列数为mn,于是想到用间接法。即会越狱的方案数=总的排列数-不会越狱的方案数。

而求不会越狱的方案数时,第一个位置有m种可能,而后面的n-1个位置都有m-1种可能(即必须满足同种宗教不相邻),由乘法原理得:不会越狱的方案数=m*(m-1)n-1

那么就得出答案:ans=mn-m*(m-1)n-1

代码:

 

 1 // luogu-judger-enable-o2
 2 #include<bits/stdc++.h>
 3 #define ll long long
 4 using namespace std;
 5 ll n,m,ans,t;
 6 const int mod=100003;
 7 inline ll fast(ll x,ll k)
 8 {
 9     ll ans=1;
10     while(k){
11         if(k&1)ans=ans*x%mod;
12         k>>=1,x=x*x%mod;
13     }
14     return ans;
15 }
16 int main()
17 {
18     cin>>m>>n;
19     printf("%lld",(mod+fast(m,n)-m*fast(m-1,n-1)%mod)%mod)    ;
20     return 0;
21 }

 

 

 

以上是关于P3197 [HNOI2008]越狱的主要内容,如果未能解决你的问题,请参考以下文章

P3197 [HNOI2008]越狱

洛谷P3197 [HNOI2008]越狱

洛谷P3197 HNOI2008 越狱

洛谷 P3197 [HNOI2008]越狱 题解

[HNOI2008]越狱(luogu P3197)

[HNOI2008]越狱