题解:

令$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 解题报告 (组合数+二分)的更多相关文章

  1. 【九度OJ】题目1040:Prime Number 解题报告

    [九度OJ]题目1040:Prime Number 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1040 题目描述: Ou ...

  2. 【LeetCode】Largest Number 解题报告

    [LeetCode]Largest Number 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/largest-number/# ...

  3. 【LeetCode】306. Additive Number 解题报告(Python)

    [LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...

  4. 【LYOI 212】「雅礼集训 2017 Day8」价(二分匹配+最大权闭合子图)

    「雅礼集训 2017 Day8」价 内存限制: 512 MiB时间限制: 1000 ms 输入文件: z.in输出文件: z.out   [分析] 蛤?一开始看错题了,但是也没有改,因为不会做. 一开 ...

  5. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

  6. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

  7. USACO Section1.2 Name That Number 解题报告

    namenum解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  8. NOIP 2017 Day1 解题报告

    总分:100分 T1,小凯的疑惑, 100分 T2,时间复杂度,0分 T3,逛公园,0分 T1 ###题意简化: 给定两个互质的数字,输出最大不能表示的数: 基础数论题目 代码: #include&l ...

  9. 【LeetCode】136. Single Number 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 异或 字典 日期 [LeetCode] 题目地址:h ...

随机推荐

  1. php常用知识集锦

    php常用知识集锦 很多位置都有写好的代码,自己做项目的时候可以直接拿来用,而不用自己写,比如现在看到的菜鸟教程. 1.判断是否为空 empty($_POST["name"]) 2 ...

  2. python spark kmeans demo

    官方的demo from numpy import array from math import sqrt from pyspark import SparkContext from pyspark. ...

  3. kafka windows安装 命令行下使用测试

    1.zookeeper安装:   (https://zookeeper.apache.org/releases.html) ①进入zookeeper的相关设置所在的文件目录,例如本文的:D:\bigd ...

  4. Centos7 minimal 系列之Nginx搭建(三)

    一.安装nginx 1.1.安装依赖包 yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install zlib zlib-d ...

  5. jQuery分页插件pagination的用法

    https://www.zhangxinxu.com/jq/pagination_zh/ 参数: 参数名 描述 参数值 maxentries 总条目数 必选参数,整数 items_per_page 每 ...

  6. wampserver的安装及使用配置方法

    在安装wampserver的过程中,根据本人在安装过程中遇到的问题,在此做个总结,与小伙伴们分享一下下~~~. 1. 何处获得Wamp ★ 在自己的Windows电脑上Web服务器软件 - Wamp. ...

  7. Safari new Date() 兼容问题

    我的时间 var myTime = "2015-12-31 12:10:21"; 正常写法 var  newTime =  new Date(myTime); safari兼容写法 ...

  8. Android 数字四舍五入

    BigDecimal b = new BigDecimal(hour).setScale(1, BigDecimal.ROUND_HALF_UP); setScale(int newScale, in ...

  9. mac上卸载node

    //卸载方法一 有时手贱看到新版本就升级,升级后发现一堆模块不能用了,心情好慢慢调,但也有调不好的时候,只能卸载重装低版本的node了. 我的机器环境如下 1. Mac OSX 10.10.3 2. ...

  10. win7(32位)旗舰版共享HP1010打印机给WINXP专业版

    一.状况: 两台电脑,同一网段内,电脑A是WIN7系统(32位),电脑B是WINXP系统. ①电脑A(win7)已经安装完打印机驱动,能正常打印,对该打印机HP1010共享时,提示“无法保存打印机设置 ...