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

  • 相关阅读:
    Python multiprocessing相关疑问
    Tornado demo3
    WebSockets
    Tornado Demo1---webspider分析
    Python assert断言
    Python学习之--数据基础
    Python学习之--python概要
    Python学习之--函数/生成器/装饰器
    Python学习之文件操作
    Python操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/Patt/p/8595409.html
Copyright © 2011-2022 走看看