BZOJ1008 /乘法原理+快速幂 解题报告

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)(100)(110)(111)

分析:

很显然,这是一道数学题。起初来想这道题可能会去想怎么去组合会越狱的方式。但是我们发现。会越狱的情况只要是两个宗教在一起就可能会出现火花。而不越狱呢只要不坐在一起就好;所以这里组合的方向就出来了。我们可以用全部组合减去不会越狱的组合。嗯是这样。第一个位置有m种选择。第二个位置就有m-1种选择。之后一直到n都只会有m-1种选择。所以:

Ans = m^n - m * (m-1)^(n-1)

就是这样。贴出代码:

/**************************************************************
    Problem: 1008
    User: oscarcode
    Language: C++
    Result: Accepted
    Time:0 ms
    Memory:820 kb
****************************************************************/
 
#include<cstdio>
long long int n,m;
long long int mi(long long int a,long long int b)
{
    long long int r=1;
    while(b)
    {
    if(b&1)
    {
        r=(a%100003)*(r%100003)%100003;
        r%=100003;
    }
    a=(a%100003)*(a%100003);
    a%=100003;
    b>>=1;
    }
    return r;
}
int main()
{
    scanf("%lld%lld",&m,&n);
    long long int ans=mi(m,n);
    ans=ans-m*mi(m-1,n-1)%100003+100003;   //不要忘了加上个模数,不然会变成负数。嗯就是这样。
    ans%=100003;
    printf("%lld",ans);
    return 0;
}
时间: 2024-09-28 20:34:10

BZOJ1008 /乘法原理+快速幂 解题报告的相关文章

bzoj1008 数学题+快速幂

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #define rep(i,l,r) for(int i=l;i<r;i++) 6 #define clr(a,x) memset(a,x,sizeof(a)) 7 #define inf 100003 8 using namespace std; 9 typedef long long

$loj$10222 佳佳的$Fibonacci$ 矩阵快速幂

正解:矩阵快速幂 解题报告: 我永远喜欢loj! 一看到这个就应该能想到矩阵快速幂? 然后就考虑转移式,发现好像直接想不好想,,,主要的问题在于这个*$i$,就很不好搞$QAQ$ 其实不难想到,$\sum_{i=1}^{n}a_i\cdot(n-i)$这样一个式子是可以在矩阵快速幂中推出来的(类似这个形式的都可,,,就随着编号递增系数递减这样子$QwQ$ 具体来说就是表示成$\sum_{i=1}^{n}\sum_{j=1}^{i}a_j$,就欧克辣(具体实现后面港,,, 但是问题在于,它是$\s

解题报告——2018级2016第二学期第四周作业 (2的幂次方)

解题报告——2018级2016第二学期第四周作业 题目: 描述 任何一个正整数都可以用2的幂次方表示.例如:137=27+23+20. 同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为:2(7)+2(3)+2(0) 进一步:7= 22+2+20   (21用2表示) 3=2+20 所以最后137可表示为: 2(2(2)+2+2(0))+2(2+2(0))+2(0) 又如:1315=210 +28 +25 +2+1 所以1315最后可表示为: 2(2(2+2(0))+

洛谷OJ P1010 幂次方 解题报告

洛谷OJ P1010 幂次方 解题报告 by MedalPluS 题目描述   任何一个正整数都可以用2的幂次方表示.例如        137=2^7+2^3+2^0         同时约定方次用括号来表示,即a^b 可表示为a(b).由此可知,137可表示为:        2(7)+2(3)+2(0)进一步:7= 2^2+2+2^0   (21用2表示)        3=2+20   所以最后137可表示为:        2(2(2)+2+2(0))+2(2+2(0))+2(0)又如

北京大学Online Judge 之 “求高精度幂(ID1001)”解题报告

北京大学Online Judge 之 "求高精度幂(ID1001)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 题目描述: Description 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解决的问题是:对一个实数R( 0.0 < R <99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <

HDU - 6027 Easy Summation(快速幂)解题

Easy Summation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1107    Accepted Submission(s): 443 Problem Description You are encountered with a traditional problem concerning the sums of po

倍增法&amp;快速幂思想在解题中的应用

1.(a^b)mod p POJ 1995 快速幂板子题 (附带板子) typedef long long ll; ll mod; ll qp(ll a,ll b) { ll ret=1,base=a; while(b) { if(b&1) ret=(ret*base)%mod; base=(base*base)%mod; b=b>>1; } return ret; } 2.求(a*b)mod p; (a,b为longlong 64位整数乘法) 设b的二进制表示为b=Ck*2^k+Ck

洛谷OJ P1045 麦森数 解题报告

洛谷OJ P1045 麦森数 解题报告 by MedalPluS   题目描述 形如2P-1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果P是个素数,2P-1不一定也是素数.到1998年底,人们已找到了37个麦森数.最大的一个是P=3021377,它有909526位.麦森数有许多重要应用,它与完全数密切相关. 任务:从文件中输入P(1000<P<3100000),计算2P-1的位数和最后500位数字(用十进制高精度数表示)   输入描述   文件中只包含一个整数P(1000&l

济南-1030试题解题报告

By shenben 本解题报告解析均为100分解题思路. 上午 T1 题意:从1− n中找一些数乘起来使得答案是一个完全平方数,求这个完全平方数 最大可能是多少. 解析: 1.  质因数分解 2.  1->n用质因数指数的相加的形式将1*n累乘起来 3.  扫一遍指数为奇数的质因数都-1,偶数的不变 4.  快速幂乘一遍,同时取模 T2 题意:有n个数,随机选择一段区间,如果这段区间的所有数的平均值在[L,R]中则 你比较厉害.求你比较厉害的概率 解析:(暴力枚举 40分) 100分需要推式子