[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)

简单到不像省选题,原本打算用半小时,结果只用了5分钟

所有状态m^n,不符合条件的状态:

第一个有m种选择,接下来n-1个为(m-1)种,所以总数:m*(m-1)^(n-1)

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

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 int p=100003;
 7 long long ans1,ans2;
 8 long long qpow(long long x,long long m)
 9 {
10     if (m==0) return 1;
11     long long tmp=qpow(x,m/2);
12     tmp=(tmp*tmp)%p;
13     if (m%2==1) tmp=(tmp*x)%p;
14     return tmp;
15 }
16 int main()
17 {long long m,n;
18     cin>>m>>n;
19     ans1=qpow(m,n);
20     ans2=(m*qpow(m-1,n-1))%p;
21 cout<<(ans1-ans2+p)%p;
22 }

 

转载于:https://www.cnblogs.com/Y-E-T-I/p/7106871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值