【bzoj1008】[HNOI2008]越狱
2016-03-25 17:44
204 查看
这是一道数学题。属于排列组合问题。
题目抽象一下就是有n个格子,用m种颜色染色,求有两个相邻的同色的情况有多少种。
其实反过来考虑更好算。
总的方案数为mn,减去每个相邻的都不同色的情况既可。
考虑每个相邻的都不同色,第一个格子可以用m中,后面的每一个格子都只能用m-1中,所以就是m(m-1)n-1,最后的答案就是mn-m(m-1)n-1。
需要用到快速幂加同余。
注意减出来可能有负数,加上mod即可。
速度极快。
题目抽象一下就是有n个格子,用m种颜色染色,求有两个相邻的同色的情况有多少种。
其实反过来考虑更好算。
总的方案数为mn,减去每个相邻的都不同色的情况既可。
考虑每个相邻的都不同色,第一个格子可以用m中,后面的每一个格子都只能用m-1中,所以就是m(m-1)n-1,最后的答案就是mn-m(m-1)n-1。
需要用到快速幂加同余。
注意减出来可能有负数,加上mod即可。
速度极快。
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using
namespace
std;
typedef
long
long
LL;
#define MOD 100003
LL m,n;
int
qpow(LL a,LL b,LL c)
{
LL ans=1;
LL k=a%c;
while
(b)
{
if
(b&1)
ans=1LL*ans*k%c;
b>>=1;
k=1LL*k*k%c;
}
return
ans;
}
int
main()
{
scanf
(
"%lld%lld"
,&m,&n);
LL ans=qpow(m,n,MOD);
ans=(ans+MOD-m*qpow(m-1,n-1,MOD)%MOD)%MOD;
printf
(
"%lld"
,ans);
return
0;
}
相关文章推荐
- C#基础:命令解析
- mysql中"ON DUPLICATE KEY UPDATE"语法遇到的问题
- 我的Python成长之路---第七天---Python基础(22)---2016年2月27日(晴)
- php 写一个水仙花数的函数
- bootstrap Table options [API]
- 十大装机联盟大PK
- 学习进度条(第四周)
- Apache反向代理配置
- JavaScript之基础-6 JavaScript 分支结构 (if、if-else、else if、switch-case)
- 【POJ 3411】 Paid Roads(搜索/DP)
- android应用开发入门让Android开发更便捷
- PHP运算符优先级
- 正则表达式
- [bzoj4025]二分图 解题报告
- 对于Logcat打不全的思考
- 一个load过高的故障排查案例
- RTMP协议学习 ---握手
- ArrayList排序,忽略大小写
- 霍夫变换
- WPF事件,路由事件