逐位考虑,两个数的和在第 $k$ 位为 $1$ 的条件为 $2 ^ k <= a + b < 2 ^ {k + 1}$ (不进位)或者 $a + b \ge 2 ^ {k + 1} + 2 ^ k$ (进位后再满足条件)。记 $calc _ i$ 表示大于等于 $i$ 的数对数量,那么答案可以表示为 $calc _ {2 ^ {k + 1}} - calc _ {2 ^ k} + calc _ {2 ^ {k + 1} + 2 ^ k}$ 。计算时排序后双指针即可统计答案。
查看代码
1 |
|
\begin {array}{c} \mathfrak {One Problem Is Difficult} \\\\ \mathfrak {Because You Don't Know} \\\\ \mathfrak {Why It Is Diffucult} \end {array}
逐位考虑,两个数的和在第 $k$ 位为 $1$ 的条件为 $2 ^ k <= a + b < 2 ^ {k + 1}$ (不进位)或者 $a + b \ge 2 ^ {k + 1} + 2 ^ k$ (进位后再满足条件)。记 $calc _ i$ 表示大于等于 $i$ 的数对数量,那么答案可以表示为 $calc _ {2 ^ {k + 1}} - calc _ {2 ^ k} + calc _ {2 ^ {k + 1} + 2 ^ k}$ 。计算时排序后双指针即可统计答案。
1 | #include <cstdio> |