【组合数学】[HNOI2008][HYSBZ/BZOJ1008]越狱
2016-02-03 22:27
399 查看
题目链接
分析
题目问的是可能越狱的状态数状态数总的状态数-不可能越狱的状态数=可能越狱的状态数。
每个人可能信仰m种宗教的任何一种,所以一共有mnm^n种状态
不可能越狱的状态:第i(i>1)个人不能和第i-1个人信仰一样的宗教, 所以只有m-1种选择,有m∗(m−1)n−1m*(m-1)^{n-1}种状态
ans=mn−m∗(m−1)n−1ans=m^n-m*(m-1)^{n-1}
用快速幂计算即可。
代码
[code]#include<cstdio> #define MOD 100003 int m; long long n; int quick_pow(int a,long long b){ int ret=1; while(b){ if(b&1) ret=1ll*ret*a%MOD; a=1ll*a*a%MOD; b>>=1; } return ret; } template<class T> void Read(T &x){ char c; while(c=getchar(),c!=EOF) if(c>='0'&&c<='9'){ x=c-'0'; while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0'; ungetc(c,stdin); return; } } int main() { Read(m),Read(n); printf("%lld",((quick_pow(m%MOD,n)-1ll*m%MOD*quick_pow((m-1)%MOD,n-1))%MOD+MOD)%MOD); }
相关文章推荐
- hdu3081 Marriage Match II
- linux实战案例-2
- 闭包的返回值和参数
- Binary tree related algorithms summary
- SPDY与HTTP2.0
- JAVA WEB学习路线
- 基于CentOS 6的主从DNS服务器搭建
- 《笨办法学Python》 第32课手记
- Androidx学习笔记(49)--- Activity的跳转
- 【HDOJ】4691 Front compression
- 程序员必知的一些快捷键!
- Codeforces Round #341 (Div. 2)(A)模拟
- sqlmap post注入两种方式
- sdk不能更新
- 正则表达式基础
- PHP Cookei记录用户历史浏览信息的代码
- UITableViewCell的循环利用 - 在storyboard里
- 视频编码的三种帧:I帧,B帧,P帧
- Androidx学习笔记(48)--- 创建Activity
- lightoj1150 - Ghosts!