bzoj1008: [HNOI2008]越狱(快速幂)
来源:互联网 发布:c语言调用windows api 编辑:程序博客网 时间:2024/05/16 15:52
题目传送门
看了数据范围马上想到组合了。。
一开始想直接求方案发现不行。
直接求方案的话应该要容斥原理去重。麻烦!
直接求方案不行就用总方案数-不会越狱的方案数不就完了咯。
总方案数貌似挺好求。
n个格子。每个格子m种选择。
那就是m的n次方。
因为n有点大。快速幂咯。
解决!
不会越狱的方案数。
第一个格子有m种选择。
那么第二种格子为了不跟第一个格子相同,所以有m-1种选择。
后面的格子为了不跟前一个格子相同,也都只有m-1种选择。
所以不会越狱的方案数等于m*(m-1)^(n-1)。
直接快速幂实现。
代码实现:
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const ll mod=100003;ll pow_mod(ll a,ll b) { //快速幂 ll ans=1;a%=mod; while(b!=0) { if(b%2==1) ans=(ans*a)%mod; b/=2;a=(a*a)%mod; } return ans;}int main() { ll m,n;scanf("%lld%lld",&m,&n ); printf("%lld\n",(((pow_mod(m,n)-(m*pow_mod(m-1,n-1))%mod))%mod+mod)%mod); return 0;}
如果你还往下滚了。
有个要注意的地方:
虽然总方案数一定大于不会越狱的方案数。
但是模了之后就不一定了。
减出来有可能等于负数。要把它转正。
一个负数的转正方法:
(A+mod)%mod(这里mod代表模的数,A代表原数)
阅读全文
0 0
- bzoj1008: [HNOI2008]越狱(快速幂)
- 【BZOJ1008】越狱(HNOI2008)-快速幂
- BZOJ1008: [HNOI2008]越狱 快速幂
- [BZOJ1008][HNOI2008]越狱(快速幂)
- bzoj1008 [HNOI2008]越狱(组合数学+快速幂)
- 【BZOJ1008】【HNOI2008】越狱 排除法+快速幂
- 【快速幂、组合数学】BZOJ1008 [HNOI2008]越狱
- BZOJ1008 越狱 (快速幂)
- [BZOJ1008][HNOI2008]越狱(排列组合)
- [快速幂]bzoj1008 越狱
- [BZOJ1008][HNOI2008]越狱(数学相关)
- 【BZOJ1008】【HNOI2008】越狱(组合数学)
- BZOJ1008 [HNOI2008]越狱(洛谷P3197)
- BZOJ1008:[HNOI2008]越狱
- [Bzoj1008][HNOI2008]越狱
- bzoj1008[HNOI2008]越狱
- bzoj1008: [HNOI2008]越狱 数学
- [BZOJ1008][HNOI2008]越狱
- 前缀式计算
- java设计模式的分类
- [LeetCode]习题1
- tensorflow基础使用5
- javaSE 构造方法
- bzoj1008: [HNOI2008]越狱(快速幂)
- 中国古代史
- loadrunner Web_类函数之web_radio_group()
- MYSQL (三)
- Java比较器描述
- C++头文件和源文件的关系以及makefile文件
- 前缀式的计算
- MySQL——根据某时间点查询其前后数据记录并正序输出到TXT文件
- Algorithms(二)Maximum Subarray