CF1362C Johnny and Another Rating Drop

题目描述

Johnny 最喜欢的竞赛编程平台最近举办的比赛受到了相当积极的评价。然而,Johnny 的分数又下降了!他认为这些题目很可爱,但并不能真实反映选手们的实力。 现在,Johnny 正在查看连续参赛者的评分,这些评分都以二进制形式表示。他认为,评分差异越大,这些人排在一起就越不公平。他将两个数字之间的差异定义为:在二进制表示下(假设所有数字都补齐前导零到相同长度),两个数字在某些位上一个为 $0$,另一个为 $1$ 的位数。例如,$5 = 101_2$ 和 $14 = 1110_2$ 的差异为 $3$,因为 $0101$ 和 $1110$ 在 $3$ 个位置上不同。Johnny 将比赛的不公平度定义为相邻参赛者之间这种差异的总和。 Johnny 已经把评分序列发给你,希望你帮他计算比赛的不公平度。你注意到,这其实是一组从 $0$ 到 $n$ 的连续整数。这很奇怪,但 Johnny 坚持说没问题。请你帮他计算这些数字的不公平度。

输入格式

输入包含多组测试数据。第一行包含一个整数 $t$($1 \leq t \leq 10\,000$),表示测试用例的数量。接下来的 $t$ 行,每行描述一个测试用例。 每个测试用例包含一行,一个整数 $n$($1 \leq n \leq 10^{18}$)。

输出格式

输出 $t$ 行。对于每个测试用例,输出一行一个整数,表示当评分序列为 $0, 1, \ldots, n-1, n$ 时比赛的不公平度。

说明/提示

对于 $n = 5$,我们计算如下序列的不公平度(将 $0$ 到 $5$ 的数字用二进制表示并补齐前导零,使它们长度相同): - $000$ - $001$ - $010$ - $011$ - $100$ - $101$ 它们之间的差异分别为 $1$、$2$、$1$、$3$、$1$,因此不公平度为 $1 + 2 + 1 + 3 + 1 = 8$。 由 ChatGPT 4.1 翻译