[BZOJ1008][HNOI2008]越狱 组合数学
2024-09-07 14:49:15
http://www.lydsy.com/JudgeOnline/problem.php?id=1008
正着直接算有点难,我们考虑反着来,用全集减补集。
总的方案数为$m^n$。第一个人有$m$种可能,第二个人有$m-1$种可能,第三个人有$m-1$种可能……发现补集就是$m*(m-1)^{n-1}$。用快速幂搞搞就行了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int mod=;
int quick_pow(int x,ll y){
int base=x,sum=;
while(y){
if(y&) sum=(ll)sum*base%mod;
base=(ll)base*base%mod;
y>>=;
}
return sum;
}
int main(){
ll n,m;
scanf("%lld%lld",&m,&n);
m%=mod;
printf("%d\n",(quick_pow(m,n)-m%mod*quick_pow(m-,n-)%mod+mod)%mod);
return ;
}
最新文章
- JSPatch
- OpenStack 简介
- dede的安装和配置
- COJ969 WZJ的数据结构(负三十一)
- 纯css代码写旋转动画
- 解决eclipse打开报错:failed to create the java virtual ma
- hibernate3.0 org.dom4j.DocumentException: Connection timed out: connect Nested exception:
- redhat 时区修改
- hadoop学习视频
- html client websocket
- 我的C#跨平台之旅(三):使用Entity Framework开发REST API
- java文章标题及文章相似度计算hash算法实现
- 【Unity】ShareSDK、SMSSDK的基本使用与常见问题
- 在Ubuntu环境下安装eclipse
- TCP报文首部详解
- Java 包(package)
- java监听器(Listener)学习笔记
- For循环语句解析
- 利用memcpy函数实现float到QByteArray的相互转化
- FindWindow和FindWindowEx