bzoj1008 [HNOI2008]越狱
2018-06-17 23:21:00来源:未知 阅读 ()
Description
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
Input
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
Output
可能越狱的状态数,模100003取余
Sample Input
Sample Output
HINT
6种状态为(000)(001)(011)(100)(110)(111)
正解:组合数学+快速幂。
直接用总数减去不合法方案,答案为$m^n-m*(m-1)^{n-1}$。
1 //It is made by wfj_2048~ 2 #include <algorithm> 3 #include <iostream> 4 #include <cstring> 5 #include <cstdlib> 6 #include <cstdio> 7 #include <vector> 8 #include <cmath> 9 #include <queue> 10 #include <stack> 11 #include <map> 12 #include <set> 13 #define rhl 100003 14 #define inf 1<<30 15 #define il inline 16 #define RG register 17 #define ll long long 18 19 using namespace std; 20 21 ll m,n; 22 23 il ll gi(){ 24 RG ll x=0,q=0; RG char ch=getchar(); 25 while ((ch<'0' || ch>'9') && ch!='-') ch=getchar(); if (ch=='-') q=1,ch=getchar(); 26 while (ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q ? -x : x; 27 } 28 29 il ll qpow(RG ll a,RG ll b){ RG ll ans=1,x=a; while (b){ if (b & 1) ans=ans*x%rhl; x=x*x%rhl,b>>=1; } return ans; } 30 31 il void work(){ m=gi(),n=gi(); printf("%lld",(qpow(m,n)-qpow(m-1,n-1)*m%rhl+rhl)%rhl); return; } 32 33 int main(){ 34 work(); 35 return 0; 36 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:enote笔记语言(4)
- BZOJ1008: [HNOI2008]越狱(快速幂) 2019-08-26
- 斜率优化dp学习笔记 洛谷P3915[HNOI2008]玩具装箱toy 2019-08-16
- BZOJ1004: [HNOI2008]Cards(Burnside引理 背包dp) 2018-07-12
- BZOJ1008: [HNOI2008]越狱(组合数) 2018-07-11
- bzoj1009 [ HNOI2008 ] -- KMP+矩阵乘法加速DP 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash