#1027. 最多的 1

    ID: 1027 传统题 1000ms 256MiB 尝试: 3 已通过: 2 难度: 普及− 上传者: 标签>基础算法位运算贪心思维

最多的 1

题目描述

给定两个正整数 nnkk

你的任务是构造一个由 kk 个非负整数组成的序列 a1,a2,,aka_1, a_2, \dots, a_k,使得满足以下条件:

  • i=1kain\sum_{i=1}^k a_i \le n
  • 序列中所有元素的二进制置位(即 11)的数量之和,也就是 i=1kpopcount(ai)\sum_{i=1}^k \text{popcount}(a_i),尽可能大。

你只需要输出 i=1kpopcount(ai)\sum_{i=1}^k \text{popcount}(a_i) 可能的最大值。

popcount(x)\text{popcount}(x) 表示数字 xx 在二进制表示中 11 的个数。例如,popcount(6)=popcount((110)2)=2\text{popcount}(6) = \text{popcount}((110)_2) = 2,而 popcount(0)=0\text{popcount}(0) = 0

输入格式

第一行包含一个整数 tt1t1031 \le t \le 10^3)—— 测试用例的数量。

接下来 tt 行,每行包含两个整数 nnkk1n,k1061 \le n, k \le 10^6)—— 分别表示序列元素之和的最大允许值,以及序列的长度。

输出格式

对于每个测试用例,输出一行一个整数,表示 i=1kpopcount(ai)\sum_{i=1}^k \text{popcount}(a_i) 可能的最大值。

样例输入 1

6
2 1
3 1
6 2
14142 137205
1000000 100
1000000 1000000

样例输出 1

1
2
4
14142
1322
1000000

说明

样例解释

  • 在第一个测试用例中,n=2,k=1n=2, k=1。我们可以选择 a=[1]a = [1]a=[2]a = [2],这两种情况下 popcount\text{popcount} 的总和均为 11
  • 在第二个测试用例中,n=3,k=1n=3, k=1。我们可以选择 a=[3]a = [3],因为 (3)10=(11)2(3)_{10} = (11)_2,所以 popcount(3)=2\text{popcount}(3) = 2
  • 在第三个测试用例中,n=6,k=2n=6, k=2。我们可以选择 a=[3,3]a = [3, 3]。总和为 3+3=663+3=6 \le 6,且总的 popcount\text{popcount} 为 $\text{popcount}(3) + \text{popcount}(3) = 2 + 2 = 4$。

数据范围

  • 对于所有测试点,保证 1t1031 \le t \le 10^3
  • 对于每个测试用例,保证 1n,k1061 \le n, k \le 10^6
  • 保证所有的输入数值均为整数。