[雅礼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 ...
随机推荐
- bzoj3715: [PA2014]Lustra(乱搞)
3715: [PA2014]Lustra 题目:传送门 题解: 随手一发水题x1 随便排序一下...小学生题??? 代码: #include<cstdio> #include<cst ...
- 服务端 | Linux 学习总结 (一)
http://billie66.github.io/TLCL/book/ 1.Ubuntu && linux shell 命令 Ubuntu两个重要版本:12.04和14.04 在终端 ...
- 请问具体到PHP的代码层面,改善高并发的措施有哪些
1.今天被问一个问题:请问具体到PHP的代码层面,改善高并发的措施有哪些? 面对高并发问题我首先想到的是集群.缓存(apt.redis.mem.内存...),但具体到PHP代码层面除了想到队列.减少网 ...
- oracle中单引号的处理
当想让输出的结果中字段带有单引号', 场景一:连续三个单引号''' select '''helin''' from dual; ---'helin' 场景二:拼接字段的结果集--连续4个单引号 sel ...
- Java web课程学习之会话(Session)
Session会话 l web应用中的会话是指一个客户端浏览器与web服务器之间连续发生一系列请求和响应过程 l web应用的会话状态是指web服务器与浏览器在会话过程中产生的状态信息,借助会话状 ...
- EXGSBS模板
EXBSGS模板 我之前把有一处b和c弄反了,有点困...然后调了半天 (exbsgs比excrt简单多了) 求x的最小正整数解 原式子拆成 在bsgs中,保证a,b互质,这样求出的逆元挪过去才对 但 ...
- 【Paper Reading】Deep Supervised Hashing for fast Image Retrieval
what has been done: This paper proposed a novel Deep Supervised Hashing method to learn a compact si ...
- webstorm注册码注册
最近jetbrains公司更新软件总是特别的快,很多私人搭建的server服务也失效了,现出一个能够永久破解的方法,非常简单,只需要2步就完成. 第一步 复制下方activation code,直接粘 ...
- [WPF] 圆形等待效果
原文:[WPF] 圆形等待效果 自己做着玩儿的,留着以后用,效果类似下面的 GIF 动画. <Grid Width="35" Height="35"> ...
- windows关于定时执行的php脚本
根据业务需求,需要服务器每天定时执行一些脚本,如后台提交数据,定时处理数据库等. 最初的思路是在某个控制器里写好方法,加入code验证,定期的用计划任务去访问.由于window计划任务这方面比较low ...