2018.10.23 NOIP训练 Leo的组合数问题(组合数学+莫队)
传送门
好题。
考察了莫队和组合数学两个知识板块。
首先需要推出单次已知n,mn,mn,m的答案的式子。
我们令f[i]f[i]f[i]表示当前最大值为第iii个数的方案数。
显然iii之后的数都是单调递减且连续的。
所以后面的方法是1种。
考虑第111~i−1i-1i−1个位置。
显然放法数为∑j=1i−1f[j]\sum _{j=1} ^{i-1}f[j]∑j=1i−1f[j]
又因为f[1]=1,f[i−1]=∑j−1i−2f[j]f[1]=1,f[i-1]=\sum _{j-1} ^{i-2}f[j]f[1]=1,f[i−1]=∑j−1i−2f[j]
因此f[i]=∑j=1i−1f[j]=∑j=1i−2f[j]+f[i−1]=2∗f[i−1]=2if[i]=\sum _{j=1} ^{i-1}f[j]=\sum _{j=1} ^{i-2}f[j]+f[i-1]=2*f[i-1]=2^if[i]=∑j=1i−1f[j]=∑j=1i−2f[j]+f[i−1]=2∗f[i−1]=2i
于是此时Ans=∑i=1n(mi)∗2i−1Ans=\sum _{i=1} ^n \binom {m} {i}*2^{i-1}Ans=∑i=1n(im)∗2i−1
然后考虑在已知当前答案时如何快速求出其它答案。
我们把n,mn,mn,m看成两个下标l,rl,rl,r,现在要转移到l′,r′l',r'l′,r′。
唉是不是有点莫队的味道。
于是我们只需要考虑如何O(1)O(1)O(1)转移。
令S(l,r)=∑i=1l(ri)∗2i−1S(l,r)=\sum _{i=1} ^l \binom {r} {i}*2^{i-1}S(l,r)=∑i=1l(ir)∗2i−1
于是
S(l+1,r)=S(l,r)+(rl+1)∗2lS(l+1,r)=S(l,r)+\binom {r} {l+1}*2^lS(l+1,r)=S(l,r)+(l+1r)∗2l
S(l−1,r)=S(l,r)−(rl)∗2l−1S(l-1,r)=S(l,r)-\binom {r} {l}*2^{l-1}S(l−1,r)=S(l,r)−(lr)∗2l−1
r的转移可以在杨辉三角上面看。
相当于把一行上下挪动。
推一推发现:
S(l,r+1)=3S(l,r)+(r0)∗20−(rl)∗2lS(l,r+1)=3S(l,r)+\binom {r} {0}*2^0-\binom {r} {l}*2^lS(l,r+1)=3S(l,r)+(0r)∗20−(lr)∗2l
S(l,r−1)=S(l,r)+(r−1l)∗2l−(r0)∗203S(l,r-1)=\frac {S(l,r)+\binom {r-1} {l}*2^l-\binom {r} {0}*2^0} {3}S(l,r−1)=3S(l,r)+(lr−1)∗2l−(0r)∗20
发现这些东西预处理之后都是可以O(1)O(1)O(1)转移的。
于是就可以用莫队了。
代码
2018.10.23 NOIP训练 Leo的组合数问题(组合数学+莫队)的更多相关文章
- 2018.10.18 NOIP训练 01矩阵(组合数学)
传送门 组合数学好题. 题目要求输出的结果成功把概率转化成了种类数. 本来可以枚举统计最小值为iii时的概率. 现在只需要统计最小值为iii时的方案数,每一行有不少于iii个1的方案数. 显然一行选i ...
- 2018.10.31 NOIP训练 锻造(方程式期望入门题)(期望dp)
传送门 根据题目列出方程: fi=pi∗(fi−1+fi−2)+(1−pi)∗(fi+1+fi)f_i=p_i*(f_{i-1}+f_{i-2})+(1-p_i)*(f_{i+1}+f_i)fi=p ...
- 2018.10.30 NOIP训练 【模板】树链剖分(换根树剖)
传送门 纯粹是为了熟悉板子. 然后发现自己手生了足足写了差不多25min而且输出的时候因为没开long longWA了三次还不知所云 代码
- 2018.10.29 NOIP训练 数据结构(带修改莫队)
传送门 带修莫队板题. 直接按照经典写法做就行了. 代码
- 2018.10.26 NOIP训练 数数树(换根dp)
传送门 换根dpdpdp傻逼题好像不好码啊. 考虑直接把每一个二进制位拆开处理. 先dfsdfsdfs出每个点到1的异或距离. 然后分类讨论一波: 如果一个点如果当前二进制位到根节点异或距离为1,那么 ...
- 2018.10.23 NOIP模拟 “新”的家园(缩图+dijksta/spfa)
传送门 考试70分骗分写挂了=30分=全场最低. 哎今天230垫底了. 这题出的挺好. 对于非关键点直接缩点. 每次把要查的insertinsertinsert进缩好的图里面跑spfa/dijkstr ...
- 2018.10.23 NOIP模拟 行星通道计划(bit)
传送门 卡常题. 成功卡掉了作死写树套树的zxy. 然而对我的二维bit无能为力. 直接维护两棵bit. bit1[i][j]bit1[i][j]bit1[i][j]表示左端点小于等于iii,右端点小 ...
- 2018.10.23 NOIP模拟 战争(并查集)
传送门 跟bzoj1015: [JSOI2008]星球大战是同一道题啊讲道理. 随便合并一下就能过了. 代码
- 2018.10.19 NOIP训练 变化的序列(线性dp)
传送门 f[i][j]f[i][j]f[i][j]表示后iii个对答案贡献有jjj个a的方案数. 可以发现最后a,ba,ba,b的总个数一定是n∗(n−1)/2n*(n-1)/2n∗(n−1)/2 因 ...
随机推荐
- 微信公众号自动回复 node
纯属分享记录: app.js var bodyParser = require('body-parser'); require('body-parser-xml')(bodyParser); var ...
- Delphi RAD Berlin OutputDebugString 输出调试信息
Delphi RAD Berlin Event Log.OutputDebugString 输出调试信息,仅在win VCL下可以用.OutputDebugString(PChar('hellowor ...
- 边框(border)宽度样式颜色 和基本属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- swagger ui
You can pull a pre-built docker image of the swagger-ui directly from Dockerhub: docker pull swagger ...
- linux下的计算器
(1)bc bc在默认的情况下是个交互式的指令.在bc工作环境下,可以使用以下计算符号:+ 加法 - 减法 * 乘法 / 除法 ^ 指数 % 余数如: 3+4;5*2;5^2;18/4 &l ...
- django创建工程,用命令
django创建工程的命令 >>python C:\Python33\Lib\site-packages\django\bin\django-admin.py startproject p ...
- for循环计算阶乘的和,for循环计算阶乘倒数的和
计算阶乘的和 //阶乘的和,5!+4!+3!+2! int a = 5; for(int b = 4; b > 0; b--) { a = a * b; } //先定义好最大数的阶乘是多少 in ...
- php拓展安装
Yaf安装配置:http://www.laruence.com/manual/yaf.install.html#yaf.installation.linux 下载Yaf的最新版本, 解压缩以后, 进入 ...
- Date.parse和new Date(str)的兼容性问题
Date.parse和new Date(str)的兼容性问题 Date '2015-05-04'是无法被各个浏览器中,使用new Date(str)来正确生成日期对象的. 正确的用法是'2015/05 ...
- Marriage Match II(二分+并查集+最大流,好题)
Marriage Match II http://acm.hdu.edu.cn/showproblem.php?pid=3081 Time Limit: 2000/1000 MS (Java/Othe ...