Atcoder abc283
https://atcoder.jp/contests/abc283/tasks
Ex - Popcount Sum
$0 \le R,M+R,2M+R,3M+R,\cdots < N$
$R \in [0,M]$
问上述[0,N]中的这些数, 的二进制下的1的个数的总数
范围
t 组数据 1e5
n 1e9
4s
1024mb
我的思路
分类一下, 感觉就需要一点数学, 然后t 1e5, 基本也就是说, 要么O 1,要么O sqrt 左右
如果m==1, 那么就是1…n 的所有数的二进制1的个数和, [1…2^t,2^t+1…n] 这样划分就是 sqrt
如果m==2^k, 那么这些数的 低k位都一样, k位以上, 和上面是一样的
如果m 不是上面的情况,进位的时刻, 似乎并不好拿捏
2, 3+2,6+2,9+2
1 | 10 |
能说的是 低两位4次的循环节, 比3还大, 高位也没啥规律
对称相加
R, M+R, 2M+R, … , kM+R
kM+R, (k-1)M+R,…, R
对称的和始终是 (k+1)M+R, 有办法 只算 一半 与 (k+1)M+R 的bit的联系, 这样一半