1 条题解
-
0
题解
思路
令前缀异或 ,。子数组 对应前缀下标 ,异或值为 ,长度为 。
做法
小规模可枚举左端点并向右维护异或值,复杂度 。
若所有元素均为 ,奇数长度子数组异或为 ,偶数长度为 0,枚举奇数长度并累加 即可。
一般情况逐位计算。扫描右前缀下标 时,对某一位记录此前该位为 0/1 的前缀数量
count及下标和sumIndex。只有位值相反的前缀 有贡献,其距离和为乘该位权并累加,再把当前前缀加入统计。
正确性证明
每个子数组与唯一前缀对 一一对应,且长度恰为 。异或值可按二进制位线性拆分;某位在 不同时贡献该位权,否则贡献零。扫描 时,公式精确求出了所有此前异值前缀的距离之和,因此每个前缀对在每一位恰被累计一次。所有位求和即为原目标。
复杂度分析
处理 31 个二进制位,时间复杂度 ,空间复杂度 。
- 1
信息
- ID
- 1130
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者