[BZOJ 3157] 国王奇遇记
Link:
Solution:
题意:求解$\sum_{i=1}^n m^i \cdot {i^m}$
$O(m^2)$做法:
定义一个函数$f[i]$,$f[i]=\sum_{i=1}^n k^i \cdot {m^k}$
$(m-1)\cdot f(i)=\sum_{k=1}^n k^i \cdot m^{k + 1} - \sum_{k=1}^n k^i \cdot m^k$
$= \sum_{k=1}^{n+1} (k - 1)^i\cdot m^k - \sum_{k=1}^n k^i \cdot m^k $
$= n^i \cdot m^{n + 1} + \sum_{k=1}^n m^k \sum_{j = 0}^{i - 1} {i \choose j} \cdot (-1)^{i - j} \cdot k^j $
$= n^i \cdot m^{n + 1} + \sum_{j = 0}^{i - 1} {i \choose j} \cdot (-1)^{i - j} \sum_{k = 1}^n k^j \cdot m^k $
$= n^i \cdot m^{n + 1} + \sum_{j = 0}^{i - 1} {i \choose j} \cdot (-1)^{i - j} \cdot f(j) $
接下来只要预处理$C_i^j$,递推即可
Code:
#include <bits/stdc++.h> using namespace std;
typedef long long ll;
const int MAXN=1e3+;
const int MOD=1e9+; ll C[MAXN][MAXN],f[MAXN],n,m,pre,dvs; ll quick_pow(ll a,ll b)
{
ll base=a,res=;
while(b)
{
if(b&) res=(res*base)%MOD;
b>>=;base=base*base%MOD;
}
return res;
} int main()
{
scanf("%lld%lld",&n,&m);
if(m==){printf("%lld",n*(n+)/%MOD);return ;} pre=quick_pow(m,n+);dvs=quick_pow(m-,MOD-);
C[][]=;
for(int i=;i<=m;i++)
{
C[i][]=;
for(int j=;j<=i;j++) C[i][j]=(C[i-][j]+C[i-][j-])%MOD;
} f[]=(pre-m+MOD)%MOD;(f[]*=dvs)%=MOD;
for(int i=;i<=m;i++)
{
pre=pre*n%MOD;f[i]=pre;
for(int j=;j<i;j++)
{
ll mark=((i-j)&)?-:;
(f[i]+=mark*C[i][j]*f[j]%MOD)%=MOD;
}
(f[i]+=MOD)%=MOD;(f[i]*=dvs)%=MOD;
}
printf("%lld",f[m]);
return ;
}
Review:
此题的加强版:BZOJ 3516/BZOJ 4126
最后一题要用到$O(m)$的算法,然而我并不能看懂
Resources:
http://blog.miskcoo.com/2014/06/bzoj-3157
http://blog.miskcoo.com/2015/08/special-polynomial-linear-interpolation
http://trinkle.blog.uoj.ac/blog/478
杜教论文:http://www.docin.com/p-638538589.html
也许先补一补多项式定理再多看看具体数学没有公式密集恐惧症了就能看懂了?
[BZOJ 3157] 国王奇遇记的更多相关文章
- BZOJ 3157: 国王奇遇记 (数学)
题面:BZOJ3157 一句话题意: 求: \[ \sum_{i=1}^ni^m\ \times m^i\ (mod\ 1e9+7)\ \ (n \leq 1e9,m\leq200)\] 题解 令 \ ...
- bzoj 3157 && bzoj 3516 国王奇遇记——推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- 3157: 国王奇遇记 & 3516: 国王奇遇记加强版 - BZOJ
果然我数学不行啊,题解君: http://www.cnblogs.com/zhuohan123/p/3726933.html const h=; var fac,facinv,powm,s:..]of ...
- BZOJ 3516 国王奇遇记加强版(乱推)
题意 求\(\sum_{k=1}^{n}k^mm^k (n\leq1e9,m\leq1e3)\) 思路 在<>中有一个方法用来求和,称为摄动法. 我们考虑用摄动法来求这个和式,看能不能得到 ...
- 【BZOJ】【3157】&【BZOJ】【3516】国王奇遇记
数论 题解:http://www.cnblogs.com/zhuohan123/p/3726933.html copy一下推导过程: 令$$S_i=\sum_{k=1}^{n}k^im^k$$ 我们有 ...
- bzoj3157国王奇遇记(秦九韶算法+矩乘)&&bzoj233AC达成
bz第233题,用一种233333333的做法过掉了(为啥我YY出一个算法来就是全网最慢的啊...) 题意:求sigma{(i^m)*(m^i),1<=i<=n},n<=10^9,m ...
- 【BZOJ3157/3516】国王奇遇记(数论)
[BZOJ3157/3516]国王奇遇记(数论) 题面 BZOJ3157 BZOJ3516 题解 先考虑怎么做\(m\le 100\)的情况. 令\(f(n,k)=\displaystyle \sum ...
- bzoj3157: 国王奇遇记
emmm...... 直接看题解好了: BZOJ-3157. 国王奇遇记 – Miskcoo's Space O(m)不懂扔掉 总之,给我们另一个处理复杂求和的方法: 找到函数之间的递推公式! 这里用 ...
随机推荐
- 【2017.12.22.A】
A 题面: 给一个n个点m条边的无向图,你可以选择一个点作为起点,然后沿着图中的边开始走,走的过程中,同一条边不能经过两次(相反的方向也不行). ...
- Hello to the cruel world
- [hdu 3068] Manacher算法O(n)最长回文子串
一个不错的讲解:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/01.05.md # ...
- WebKit阅读起步
转摘自:http://my.oschina.net/myemptybottle/blog/42683 部分转摘,全文请查看原文! 我第一次看到WebKit代码中did,will前缀有点困惑,看多了才熟 ...
- HTML页面为什么设置了UTF-8仍然中文乱码
如题,其实问题很简单,在用EditPlus写html页面的时候,发现设置为UTF-8的时候仍然出现了乱码,这是一个很奇怪的问题,而且我完全考虑了浏览器的解析问题,将title放在了了meta标签之后, ...
- JVM内存模型 三
本文章节: 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉 ...
- bzoj1574 [Usaco2009 Jan]地震损坏Damage
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1574 [题解] 贪心把report的点的旁边所有点破坏即可. # include <s ...
- codeforces 854 problem E
E. Boredom Ilya is sitting in a waiting area of Metropolis airport and is bored of looking at time t ...
- 流程控制 while循环 运算符
具体知识戳这里 可变数据类型:在id不变的情况下,数据类型内部的元素(value)可以改变 如:列表,字典 不可变类型:value改变,id也跟的改变 如:数字.字符.布尔类型 运算符 #算数运算符# ...
- selenium自动化添加日志
于logging日志的介绍,主要有两大功能,一个是控制台的输出,一个是保存到本地文件 先封装logging模块,保存到common文件夹命名为logger.py,以便于调用,直接上代码 filenam ...