zoukankan      html  css  js  c++  java
  • AtCoder Regular Contest 092 B Two Sequences

    题目大意

    给定两个长为 $n$ 个整数序列 $a_1, dots, a_n$ 和 $b_1, dots, b_n$ 。求所有 $a_i + b_j$($1le i, jle n$)的 XOR 值。

    数据范围

    $1le n le 200000$
    $0le a_i, b_j < 2^{28}$

    解法

    这道题比赛时没想出来,赛后想到解法了。
    我们的目标是求出这 $n^2$ 个数中有奇数个还是偶数个数的二进制第 $k$ 位为 $1$,而必求出其中究竟有几个数的二进制第 $k$ 位为 $1$ 。

    若不考虑进位,则很容易求出这 $n^2$ 个数中有几个数二进制第 $k$ 位为 $1$。考虑进位时,我们也只需要知道(两数相加)向第 $k$ 位进位发生了多少次。

    向第 $k$ 位进位发生了多少次这个问题可以这样求解:
    将 $a_1, dots, a_n$ 的前 $k$ 位 (第 $0$ 到第 $k-1$ 位)构成的数排序。枚举 $b_i$,二分搜索出前述序列中有多少个数与 $b_i$ 的前 $k$ 位之和大于等于 $2^{k}$ 。


    UPD1
    我描述的解法思路不够清晰简明,题解上给出的解法更好。
    总而言之,这篇题解的参考价值不大(几乎没有参考价值),败笔。

  • 相关阅读:
    字符串实现变量映射
    纯css实现无限嵌套菜单
    flex布局嵌套之高度自适应
    easy ui 零散技巧
    js高级应用
    前端利器
    css高级应用及问题记录(持续更新)
    兼容性验证方案
    原生js判断元素是否可见
    vue-cli webpack躺坑之旅
  • 原文地址:https://www.cnblogs.com/Patt/p/8595409.html
Copyright © 2011-2022 走看看