[雅礼NOIP集训 2017] number 解题报告 (组合数+二分)
题解:
令$S(i)={i+1,i+2,...,i<<1}$,f(i,k)表示S(i)中在二进制下恰好有k个1的数的个数
那么我们有$f(i,k)=\sum_{x=1}^{min(k,p)}\dbinom{a_x+1}{k-x+1}-\dbinom{a_x}{k-x+1}$
$a_x$表示i在二进制下第x高的1所在的2的幂次,p是i在二进制下1的个数
为什么呢?我们设g(i,k)表示在小于等于i的数中在二进制下1的个数等于k的数的个数,那么我们有f(i,k)=g(i<<1,k)-g(i,k)
考虑怎么算g(i,k)。对于i的每一位1,我们强制把这一位变成0,假设这个1是第x高的1,在二进制下的次幂为$a_x$,那么我们保持前x-1个1不变,把剩下的k-x+1(+1是因为第x位变成了0空出了一个1)个1分配到从小到大$a_x$个位置里。由于第x位被强制变成了0,新分配的数一定满足1的个数为k且小于i;对于每一位1我们这样处理,可以保证方案数不重不漏
如果本身i在二进制下就有k个1,那么i<<1在二进制下肯定也有k个1,这样方案数就抵消了,因此在上面的算式中没有考虑这样的情况
下面来看两个结论:
结论1:$f(i,k)<=f(i+1,k)$
证明:
显然i+1的S集合与i的S集合相比多了2*i+1,2*i+2,少了i+1,我们发现如果i+1是算入了贡献的,那么2*i+2显然也被算入了贡献,这样就抵消了,得证
结论2:k>1时,$f(i,k)<f(i<<1,k)$
这个,咱们感性理解一下吧,应该也不难证
结论3:m=0时,n的个数为(1<<k-1)-1;k=1时,n一定可以取1,并且有正无穷个答案,其他情况答案都不是正无穷
证明:
m=0时,说明S集合中不存在一个数在二进制下1的个数为k,那么n的取值一定是小于等于(1<<k-1)-1的,不理解的话请注意S集合的定义
k=1时,由于保证有解,m一定为1。正无穷个答案很好理解吧。至于其他情况答案有穷性,我也不会证
由结论1得知,符合条件的n是连在一起的
由结论2得知,当k>1时,所有的n都在2e18以内
[雅礼NOIP集训 2017] number 解题报告 (组合数+二分)的更多相关文章
- 【九度OJ】题目1040:Prime Number 解题报告
[九度OJ]题目1040:Prime Number 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1040 题目描述: Ou ...
- 【LeetCode】Largest Number 解题报告
[LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...
- 【LeetCode】306. Additive Number 解题报告(Python)
[LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- 【LYOI 212】「雅礼集训 2017 Day8」价(二分匹配+最大权闭合子图)
「雅礼集训 2017 Day8」价 内存限制: 512 MiB时间限制: 1000 ms 输入文件: z.in输出文件: z.out [分析] 蛤?一开始看错题了,但是也没有改,因为不会做. 一开 ...
- NOIP 2018 普及组 解题报告
目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...
- 20161005 NOIP 模拟赛 T2 解题报告
beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...
- USACO Section1.2 Name That Number 解题报告
namenum解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...
- NOIP 2017 Day1 解题报告
总分:100分 T1,小凯的疑惑, 100分 T2,时间复杂度,0分 T3,逛公园,0分 T1 ###题意简化: 给定两个互质的数字,输出最大不能表示的数: 基础数论题目 代码: #include&l ...
- 【LeetCode】136. Single Number 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 异或 字典 日期 [LeetCode] 题目地址:h ...
随机推荐
- Ubuntu 16.04 安装 Wireshark分析tcpdump的pcap包——sudo apt install wireshark-qt
tcpdump 的抓包保存到文件的命令参数是-w xxx.cap 抓eth1的包 tcpdump -i eth1 -w /tmp/xxx.cap 抓 192.168.1.123的包 tc ...
- query.setFirstResult解析
转自:https://blog.csdn.net/thinkingcao/article/details/78053622
- BZOJ 2427 /HAOI 2010 软件安装 tarjan缩点+树形DP
终于是道中文题了.... 当时考试的时候就考的这道题.... 果断GG. 思路: 因为有可能存在依赖环,所以呢 先要tarjan一遍 来缩点. 随后就进行一遍树形DP就好了.. x表示当前的节点.j表 ...
- 编译libvlc。。。
https://wiki.videolan.org/Win32Compile按照官网教程,安装所需工具,参考 :http://qjw.qiujinwu.com/blog/2014/12/08/cros ...
- windows上上传代码到Github
Repository name: 仓库名称 Description(可选): 仓库描述介绍 Public, Private : 仓库权限(公开共享,私有或指定合作者) Initialize this ...
- for循环的写法及优化
最近这几天在研究浏览器性能的时候发现了一些小知识,在此做一总结: 其中经常用到的for循环有:正常的for循环,for in循环,for of循环等,但是对于正常的for循环可以做一下优化,使得其在执 ...
- ZBrush中Mrgb、Rgb和M的使用
ZBrush®软件工具架中所有的命令选项都是我们平时较为常用的,位于工具架的中间位置,有一个Mrgb.Rgb和M选项它们所表示的是材质及颜色,那么,在Zbrush中只要选择相应的选项,就可以同时绘制材 ...
- css3动画机制原理和实战
这段时间喜欢上css3动画效果了,关于这个每个人都有不同的看法,在我个人看来css3在做一些小页面的动画效果还是很好用的,一些简单的小动画要是用js的话,未免浪费. 要是做大一点的话最好js+css3 ...
- servlet实现定时刷新功能
1,继承httpservlet类重写doget个dopost方法 2,发送头消息 response.setHeader("refresh","间隔秒数:url=目标地址& ...
- 利用after和before伪元素在文字两边写横线
示例: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...