BZOJ_1008_[HNOI2008]_越狱_(简单组合数学+快速幂)

描述



http://www.lydsy.com/JudgeOnline/problem.php?id=1008

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

p.s.我真的没有企图概括的必要...

分析



所有情况是m^n,不可能发生越狱的情况是m*(m-1)^(n-1).

最后答案就是: m*(m^(n-1)-(m-1)^(n-1)).做个快速幂就好了.

注意:

1.减法后,在取余前要加一个mod.

p.s.终于做到一道水题了...

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3
 4 typedef long long ll;
 5 const ll  mod=100003;
 6 ll n,m;
 7 ll quick_power(ll x,ll y){
 8     ll ret=1;
 9     for(;y;x=(x*x)%mod, y>>=1) if(y&1) ret=(ret*x)%mod;
10     return ret;
11 }
12 int main(){
13     scanf("%lld%lld",&m,&n);
14     printf("%lld\n",m*((quick_power(m,n-1)-quick_power(m-1,n-1)+mod)%mod)%mod);
15     return 0;
16 }

1008: [HNOI2008]越狱

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 7131  Solved: 3051
[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

时间: 2024-10-26 10:20:02

BZOJ_1008_[HNOI2008]_越狱_(简单组合数学+快速幂)的相关文章

HDOJ--4869--Turn the pokers【组合数学+快速幂】

链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 题意:有m张扑克,开始时全部正面朝下,你可以翻n次牌,每次可以翻xi张,翻拍规则就是正面朝下变背面朝下,反之亦然,问经过n次翻牌后牌的朝向有多少种情况. 这道题在比赛时我们只开了个头,却无从下手.我看了网上的解题报告,说的都比较简单,对于我这名菜鸟来说也想了比较长的时间才想明白,所以我想写的清楚一些日后再看还能看的很清晰. 思路是这样,每张牌翻奇数次必然是正面朝上,翻偶数次则还是正面朝下.现在用0

HDU3306Another kind of Fibonacci(简单矩阵快速幂)

哎,本来是想学学矩阵构造的方法的,,突然发现自己不用看直接就会yy构造... 看下右边有什么.. 题目地址:Another kind of Fibonacci AC代码: #include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; const int mod=10007; int p[4][4],a[4][4],tmp[4][4]; i

UVA10870—Recurrences(简单矩阵快速幂)

题目链接:https://vjudge.net/problem/UVA-10870 题目意思: 给出a1,a2,a3,a4,a5------ad,然后算下面这个递推式子,简单的矩阵快速幂,裸题,但是第一个次遇到了矩阵大小不确定的矩阵快速幂,而且在这道题里面第一次明白了如何构造矩阵.算是矩阵快速幂的学习的一个小里程碑吧. f(n) = a1 *f(n - 1) + a2 *f(n - 2) + a3 *f(n - 3) + - + ad* f(n - d),  n > d.求f(n) 代码: 1

hdu 5363 组合数学 快速幂

Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 131072/131072 K (Java/Others) Problem Description soda has a set S with n integers {1,2,…,n}. A set is called key set if the sum of integers in the set is an even number. He wants to know how man

UVA11609 - Teams(组合数学+快速幂)

题目链接 题意:从N个人中选出K个人为一只队伍(1 <= K <= N),每个队伍都要有一个队长,当队长不同时,所代表的队伍也不同,求一共可以选出多少只队伍. 思路:依题目可得ans = sum(i * C(i, n)),化简可得ans = n * sum(C(i, n - 1)) = n * 2 ^ (n - 1).之后用快速幂求解. 代码: #include <iostream> #include <cstdio> #include <cstring>

UVA 11609 Teams 组合数学+快速幂

In a galaxy far far away there is an ancient game played among the planets. The specialty of the gameis that there is no limitation on the number of players in each team, as long as there is a captain inthe team. (The game is totally strategic, so so

ZOJ 2853 Evolution 【简单矩阵快速幂】

这道题目第二次看的时候才彻底理解了是什么意思 把题目转化为数学模型分析后就是 有一个初始序列, 有一个进化率矩阵 求的是初始序列 与进化率矩阵进行 m 次运算后, 初始序列最后一位的答案 那么显然,可以对进化率矩阵进行快速幂计算 Example Let's assume that P(0, 1) = P(1, 2) = 1, and at the beginning of a sub-process, the populations of 0, 1, 2 are 40, 20 and 10 re

ACM学习历程—SNNUOJ 1110 A Simple Problem(递推 &amp;&amp; 逆元 &amp;&amp; 组合数学 &amp;&amp; 快速幂)(2015陕西省大学生程序设计竞赛K题)

Description Assuming a finite – radius “ball” which is on an N dimension is cut with a “knife” of N-1 dimension. How many pieces will the “ball” be cut into most?However, it’s impossible to understand the following statement without any explanation.L

Codeforces - 185A 简单矩阵快速幂

题意:求第n个三角形内部的上三角形个数 对每个三角形分别维护上下三角形个数,记为\(dp[1][i],dp[2][i]\) 规律很明显是 \(dp[1][i+1]=3*dp[1][i]+dp[2][i]\) \(dp[2][i+1]=3*dp[2][i]+dp[1][i]\) 别忘了快速幂里也要long long,白送了个TLE /*H E A D*/ inline ll mod(ll a){return a%MOD;} struct Matrix{ ll mt[5][5],r,c; void