1008: [HNOI2008]越狱(计数问题)

1008: [HNOI2008]越狱

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 11361  Solved: 4914
[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)

分析

正着想不好想,反过来想,求不发生越狱的方案数,用总方案数减去即可。

总方案数$=m^n$,每个房间都有m中选择

不发生越狱的方案数$=m*(m-1)^{n-1}$,第一个房间有m中选择,因为第二个不能和第一个相同,所以有m-1个选择,第3,4...n个房间都是这样。

code

 1 #include<cstdio>
 2 #include<iostream>
 3
 4 using namespace std;
 5 typedef long long LL;
 6 const LL mod = 100003;
 7
 8 LL ksm(LL a,LL b) {
 9     LL ret  = 1;
10     while (b) {
11         if (b & 1) ret = (ret * a) % mod;
12         a = (a * a) % mod;
13         b >>= 1;
14     }
15     return ret % mod;
16 }
17 int main() {
18     LL m,n;
19     cin >> m >> n;
20     cout << ( (ksm(m,n) - m*ksm(m-1,n-1)%mod + mod) % mod); //-在m*ksm(..)需要mod
21     return 0;
22 }

原文地址:https://www.cnblogs.com/mjtcn/p/8590909.html

时间: 2024-11-04 16:28:16

1008: [HNOI2008]越狱(计数问题)的相关文章

BZOJ 1008: [HNOI2008]越狱 水

BZOJ难得的水题 1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4977  Solved: 2149 [Submit][Status][Discuss] Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 Input 输入两个整数M,N.1<=M<=10^8,1&

BZOJ 1008: [HNOI2008]越狱 快速幂

1008: [HNOI2008]越狱 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)(10

1008: [HNOI2008]越狱

1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7777  Solved: 3331[Submit][Status][Discuss] Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 Input 输入两个整数M,N.1<=M<=10^8,1<=N<=10

BZOJ 1008: [HNOI2008]越狱 组合数学

原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1008 题解: 就很傻逼的组合数学啊... $$ans=M^N-M*(M-1)^{(N-1)}$$ 代码: /************************************************************** Problem: 1008 User: HarryGuo2012 Language: C++ Result: Accepted Time:0 ms Memo

bzoj 1008: [HNOI2008]越狱

1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 long long n,m,ans=1,ans1=1,n1; 5 int main() 6 { 7 scanf("%lld%lld",&m,&n); 8 n--; 9 long long n1=n,k=m-1,m1=m; 10 for(;n1;) 11 { 12 if(n1%2) 13 ans=(ans*k)%1000

BZOJ 1008: [HNOI2008]越狱【组合】

很少有的思路秒解.题意可以描述成对长度为n的格子有m种染色方案,问存在相邻两个格子同色的方案数,正难则反易,考虑问题的背面任意两个相邻的格子都不同色,第一个格子可以涂任意一种颜色m种可能,剩下的n-1个格子每个不能和前面一个格子相同固有m-1种可能,总的方案数有m^n种,所以答案就是m^n-m(m-1)^n-1 由于答案取模及幂次较高,因此可以考虑小费马定理或快速幂优化 由于数据太2,一开始用 int读成功贡献了3个WA TAT #include<iostream> #include<c

【BZOJ 1008】[HNOI2008]越狱

1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 5535  Solved: 2370[Submit][Status][Discuss] Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 Input 输入两个整数M,N.1<=M<=10^8,1<=N<=10

AC日记——[HNOI2008]越狱 bzoj 1008

1008 思路: 越狱情况=总情况-不越狱情况: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define ll long long ll poww(ll x,ll e,ll k) { ll res=1,pos=x;pos%=k; while(e) { if(e&1) res=(res*p

[BZOJ1008] [HNOI2008] 越狱 (数学)

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