CF2240A Another Popcount Problem
题目描述
给定两个整数 $n$ 和 $k$。
你的任务是构造一个长度为 $k$ 的序列 $a$,其中 $a_1, a_2, \ldots, a_k$ 都是非负整数,满足以下条件:
- $\sum_{i=1}^{k} a_i \leq n$
- 使得所有元素二进制中 $1$ 的数量之和(即 $\sum_{i=1}^{k} \operatorname{popcount}(a_i)$)尽可能大。
你只需输出 $\sum_{i=1}^{k} \operatorname{popcount}(a_i)$ 的最大可能值。
其中,$\operatorname{popcount}(x)$ 表示 $x$ 的二进制表示中 $1$ 的个数。例如,$\operatorname{popcount}(6) = \operatorname{popcount}((110)_2) = 2$,并且 $\operatorname{popcount}(0) = 0$。
输入格式
每组测试包含多个测试用例。第一行包含测试用例个数 $t$($1 \leq t \leq 10^3$)。
接下来的 $t$ 行,每行包含两个整数 $n$ 和 $k$($1 \leq n, k \leq 10^6$),分别表示序列的最大允许和以及序列的长度。
输出格式
对于每个测试用例,输出一个整数,即 $\sum_{i=1}^{k} \operatorname{popcount}(a_i)$ 的最大可能值。
说明/提示
- 第一个测试用例中,$n=2$ 且 $k=1$。我们可以选择 $a=[1]$ 或 $a=[2]$,两种情况下 popcount 之和都是 $1$。
- 第二个测试用例中,$n=3$ 且 $k=1$。我们可以选择 $a=[3]$,因为 $(3)_2=(11)_2$,所以 $\operatorname{popcount}(3)=2$。
- 第三个测试用例中,$n=6$ 且 $k=2$。我们可以选择 $a=[3, 3]$,总和 $3+3=6 \leq 6$,总 popcount 为 $2 + 2 = 4$。
由 ChatGPT 5 翻译