摘要: 将0,1, 2^k-1这些数分成M份,每份的值为该份的1的数字之和,求使最大的那一份最小K<=100,M<=100最大值最小化,二分的经典应用思路:二分这个最大值X,然后看能不能组成M份,然后再调整Cal(x):求出0-x这些数字当中1出现的次数。 其实实际分析一下就很简单,把x化作是二进制的数,那么从高位往低位走,遇见一个1,假使这个位置在i位置,那么答案ans=ans+F[i-1]+j*2^(i-1)+1,其中j表示的是到现在位置所遇见的1的个数,F[i]表示的是0-2^i-1中所出现的1的个数,然后再加上之前出现的1的个数乘以该位出现1所经历的次数,再加上这个位置上自己出现的 阅读全文
posted @ 2013-04-29 12:31 诺小J 阅读(448) 评论(0) 推荐(0) 编辑