BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版
令\[S_i=\sum_{k=1}^n k^i m^k\]我们有\[\begin{eqnarray*}(m-1)S_i & = & mS_i - S_i \\& = & \sum_{k=1}^n k^i m^{k+1} - \sum_{k=1}^n k^i m^k \\& = & \sum_{k=2}^{n+1} (k-1)^i m^k - \sum_{k=1}^n k^i m^k \\& = & n^i m^{n+1} + \sum_{k=1}^n m^k\big( (k-1)^i - k^i\big) \\& = & n^i m^{n+1} + \sum_{k=1}^n \bigg( \sum_{j=1}^{i-1} (-1)^{i-j}{i \choose j}k^j m^k \bigg) \\& = & n^i m^{n+1} + \sum_{j=0}^{i-1} (-1)^{i-j}{i \choose j} S_j\end{eqnarray*}\]直接按照这条式子\(O(m^2)\)递推即可。
P.S. 来自http://taorunz.logdown.com/posts/193397-bzoj3157
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
const LL mod=;
inline LL sqr(LL num){return num*num;}
LL mexp(LL a,LL b,LL p){return b?sqr(mexp(a,b>>,p))%p*((b&)?a:)%p:;}
LL fac[],facinv[],powm1[];
LL C(LL n,LL r){return fac[n]*facinv[r]%mod*facinv[n-r]%mod;}
LL n,m,s[];
int main(int argc, char *argv[])
{
cin>>n>>m;
if(m==){cout<<n*(n+)/%mod<<endl;return ;}
fac[]=;for(int i=;i<=m;i++)fac[i]=fac[i-]*i%mod;
facinv[m]=mexp(fac[m],mod-,mod);facinv[]=;
for(int i=m-;i>=;i--)facinv[i]=facinv[i+]*(i+)%mod;
powm1[]=;for(int i=;i<=m;i++)powm1[i]=powm1[i-]*-;
s[]=((mexp(m,n+,mod)-m)%mod+mod)%mod*mexp(m-,mod-,mod);
for(int i=;i<=m;i++)
{
s[i]=mexp(n,i,mod)*mexp(m,n+,mod)%mod;
for(int j=;j<i;j++)s[i]=((s[i]+powm1[i-j]*C(i,j)*s[j])%mod+mod)%mod;
s[i]=s[i]*mexp(m-,mod-,mod)%mod;
}
cout<<s[m]<<endl;
return ;
}
BZOJ3157: 国王奇遇记 & 3516: 国王奇遇记加强版的更多相关文章
- 3157: 国王奇遇记 & 3516: 国王奇遇记加强版 - BZOJ
果然我数学不行啊,题解君: http://www.cnblogs.com/zhuohan123/p/3726933.html const h=; var fac,facinv,powm,s:..]of ...
- bzoj3157 3516 国王奇遇记
Description Input 共一行包括两个正整数N和M. Output 共一行为所求表达式的值对10^9+7取模的值. 特判m=1 m≠1时: 设S[u]=sigma(i^u*m^i) m*S ...
- 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 ...
- BZOJ 3516 国王奇遇记加强版(乱推)
题意 求\(\sum_{k=1}^{n}k^mm^k (n\leq1e9,m\leq1e3)\) 思路 在<>中有一个方法用来求和,称为摄动法. 我们考虑用摄动法来求这个和式,看能不能得到 ...
- 【退役记】CSP2019 退役记
Day -1 机房自习,因为一些奇怪原因心不在焉 我可能太在意csp了 晚上有点扛不住去七楼阳台思考人生,得到了一些惊人的结论想下来由于某种原因继续跑到七楼思考人生 然后晚自习下课仰天大笑出门去,我辈 ...
- java面试记很多次还是记不住的问题
1.java底层如何实现多态 https://blog.csdn.net/fan2012huan/article/details/51007517 (1)在常量池中找到方法调用的符号引用 (2)查看P ...
- 【ESRI论坛6周年征文】ArcEngine注记(Anno/ Label/Element等)处理专题 -入门篇
原发表于ESRI中国社区,转过来.我的社区帐号:jhlong http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=122097 ----------- ...
- 2015 CTSC & APIO滚粗记
o诶人太弱..... 记一发滚粗记以便治疗我的健忘症= = //文章会不定时修改,添加一些内容什么的...因此最好看一下刷新一下(因为有可能你正在看= =我正在写... 5.2 早上9点坐上长达11小 ...
随机推荐
- SPOJ Two Paths
Description 给定一个无向图,含有一定的路.从中找出两个最长的路径(每条路径有一些相通路组成)这两个路径不能经过公共的点,求何时二路径的乘积最大. 本题给出的无向图是一棵树,每边权值为1. ...
- linux命令(39):ss命令
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- MapReduce程序的几种提交运行模式
本地模型运行 1/在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行 ----输入输出数据可以放在本地路径下(c:/wc/ ...
- AC日记——Dynamic Ranking 洛谷 P2617
Dynamic Ranking 思路: 可持久化树状数组: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1 ...
- Linux用户和用户组的初步知识
用户组相关:在Linux系统下,当创建一个如叫tom的用户,那么系统同时会创建一个叫tom的用户组linux中用户的信息都是放在/etc/passwd下的,用户的密码经过加密后放在/etc/shado ...
- 03 java 基础:注释 关键字 标识符 JShell
Java 10 中已有 Jshell 工具,方便用户在其中直接输入相关 java 代码. 注释:java 中分为单行注释 // 多行注释 /* */ 文档注释 /** */ 关键字:在 ...
- Appscan的第一个测试请求就是提交MAC地址
GET /AppScan_fingerprint/MAC_ADDRESS_真实的MAC地址.html HTTP/1.0 还好都是合法测试,否则情何以堪...
- 用Lucene.net对数据库建立索引及搜索<转>
用Lucene.net对数据库建立索引及搜索 最近我一直在研究 Lucene.net ,发现Lucene.net对数据库方面建索引的文章在网上很少见,其实它是可以对数据库进行索引的,我闲着没事,写了个 ...
- 解决 .htaccess 导致的403禁止访问
如果启用了mod_rewrite, 那么Options就一定要启用FollowSymLinks或者SymLinksifOwnerMatch, 否则会出现Fobidden页面禁止访问的错误. 于是把 O ...
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个 ...