bzoj3157: 国王奇遇记
2024-08-26 09:08:03
emmm。。。。。。
直接看题解好了:
BZOJ-3157. 国王奇遇记 – Miskcoo's Space
O(m)不懂扔掉
总之,给我们另一个处理复杂求和的方法:
找到函数之间的递推公式!
这里用错位相减,然后想办法转化
由于根据二项式定理,展开之后会出现k^i的乘方,所以展开,有助于变成f(j)递推下去
O(m^2)
#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
const int N=;
const int mod=1e9+;
ll C[N][N];
int n,m;
ll f[N];
ll qm(ll x,ll y){
ll ret=;
while(y){
if(y&) ret=ret*x%mod;
x=x*x%mod;
y>>=;
}
return ret;
}
int main(){
rd(n);rd(m); if(m==){
ll ans=((ll)n*(n+))%mod*qm(,mod-)%mod;
printf("%lld",ans);
return ;
}
C[][]=;
for(reg i=;i<=m;++i){
C[i][]=;
for(reg j=;j<=m;++j){
C[i][j]=(C[i-][j]+C[i-][j-])%mod;
}
}
f[]=m*(qm(m,n)-+mod)%mod*qm(m-,mod-)%mod;
for(reg i=;i<=m;++i){
for(reg j=;j<=i-;++j){
if((i-j)&){
f[i]=(f[i]-C[i][j]*f[j]%mod+mod)%mod;
}else{
f[i]=(f[i]+C[i][j]*f[j]%mod)%mod;
}
}
f[i]=(f[i]+qm(n,i)*qm(m,n+)%mod)%mod;
f[i]=(f[i]*qm(m-,mod-))%mod;
}
printf("%lld",f[m]);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2018/12/29 16:48:22
*/
最新文章
- HTML5--div、span超出部分省略号显示
- 使用noConflict重命名jQuery对象
- 接口分离原则(Interface Segregation Principle)
- ZOJ 3494 BCD Code(AC自动机+数位DP)
- Aspose Cells 添加数据验证(动态下拉列表验证)
- 学习java第二天
- Sublime Text 安装sftp插件
- 谈谈javascript插件的写法
- 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算
- eclipse 中修改 M2_REPO的值--转载
- PIL安装记录,编译支持jpeg png
- Java---实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)
- GO函数倒叙输出
- SVN常用命令积累
- List<;T>;对元素的查找。
- combinations(组合)
- openlayers4 入门开发系列之地图导航控件篇(附源码下载)
- 第一周CTF (合天CTF)
- Using MongoDB with Web API and ASP.NET Core
- Codeforces Round #540 (Div. 3)--1118B - Tanya and Candies(easy TL!)