HYSBZ - 1008 越狱(组合数学)
Posted GoesOn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HYSBZ - 1008 越狱(组合数学)相关的知识,希望对你有一定的参考价值。
1008: [HNOI2008]越狱
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 9918 Solved: 4271
[Submit][Status][Discuss]
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种宗教。每个房间都有m种可能,那就有n^m种,反向思考,总数减去相邻两个不相同的数量,就是答案。相邻两个不相同的情况有m*(m-1)^(n-1)种情况。
代码:
#include <cstdio> using namespace std; const int mod = 1e5+3; int ks(long long n,long long k) { long long s=1; while(k) { if(k%2) s = s*n%mod; n = n*n%mod; k /= 2; } return s; } int main() { long long m,n; while(scanf("%lld %lld",&m,&n)!=EOF) { long long tot = ks(m,n); long long ret = m*ks(m-1,n-1)%mod; long long ans = (tot-ret+mod)%mod; printf("%lld\n",ans); } }
以上是关于HYSBZ - 1008 越狱(组合数学)的主要内容,如果未能解决你的问题,请参考以下文章