codeforces round #596 题解

吃一堑长一智,2^25>1e9这种错再犯就吃评测机qwwwqwqqwqqq

A. Forgetting Things

简简单单,随便构造一个数据就好了

B2. TV Subscriptions

从头到尾遍历一遍就好了,有点像队列的思想,控制队列内只有d个元素,记录这d个元素的种类数目。

C. p-binary

点题,我无力吐槽……2<<25 < 1e9,我永远记得了……
思路:贪心地从小到大枚举i,检查n+i*p能否被i个2^m次幂(m可以为任意非负整数)表示。
检查二进制下n+i*p有多少个1,如果有q个1,且q<=i,则可以。
为什么是<=呢?=很好理解,但是<为什么也合理?

样例输入:24 -1
样例输出:4
样例解释:24=(2^4−1)+(2^2−1)+(2^2−1)+(2^2−1),即28可以分为:2^4+2^2+2^2+2^2.
实际上28在二进制下的表示为:10010,即2^5+2^2。但是2^5可以分为2^4+2^4,使得多项式数目+1,同理不断分下去就可以得到i个多项式。

点赞