$n \leq 100000$的俩序列,数字范围$2^{28}$,问所有$a_i+b_j$的$n^2$个数字的异或和。

这种东西肯定是按位考虑嘛,从低位开始然后补上进位。比如说第一位俩串分别有$c$个$1$和$e$个$1$,$d$个$0$和$f$个$0$,然后这一位就是$c*f+e*d$个$1$,会进$c*e$个$1$给第二位。但这里没法解决连续进位的问题,因为连续进位必须去具体考察哪几个数字进了位,复杂度不对。

思维定势--考察某一位答案时从“模拟加法”“进位”的角度,无法从中跳出是不可能出解的。

那换个方法呗,可以看到某一位的答案是由不高于这一位的所有位决定的。假如现在在第$k$位,把$a$和$b$的所有数字取出最低的$k$位,然后可以发现,$2^k \leq a_i+b_j < 2^k*2$或$2^k*3 \leq a_i+b_j < 2^k*4$时,这一位会产生一个1。这俩式子移下项,发现只要把$b$排序就可以枚举$a$然后二分答案了。

这个故事告诉我们,当发现自己陷入思维瓶颈的时候,一定要往后退一步。

其实退一步胜这种思想不仅应用于OI,在我国古代智慧中国象棋中也有这种想法。《梦入神机》中就有记载一篇名为《退一步胜》的残局,引用如下,转侵删:

好不引用了刷题去。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdlib>
  4. #include<cstdio>
  5. //#include<queue>
  6. //#include<time.h>
  7. //#include<complex>
  8. #include<algorithm>
  9. #include<stdlib.h>
  10. using namespace std;
  11.  
  12. int n;
  13. #define maxn 200011
  14. int a[maxn],b[maxn],na[maxn],nb[maxn];
  15. int main()
  16. {
  17. scanf("%d",&n); for (int i=;i<=n;i++) scanf("%d",&a[i]); for (int i=;i<=n;i++) scanf("%d",&b[i]);
  18. int ans=;
  19. for (int i=;i<=;i++)
  20. {
  21. for (int j=;j<=n;j++) na[j]=a[j]&((<<(i+))-),nb[j]=b[j]&((<<(i+))-);
  22. sort(nb+,nb++n); int t1=<<i,t2=*t1,t3=*t1,t4=*t1;
  23. int now=;
  24. for (int j=;j<=n;j++)
  25. {
  26. now^=(lower_bound(nb+,nb++n,t2-na[j])-lower_bound(nb+,nb++n,t1-na[j]))&;
  27. now^=(lower_bound(nb+,nb++n,t4-na[j])-lower_bound(nb+,nb++n,t3-na[j]))&;
  28. }
  29. ans|=now<<i;
  30. }
  31. printf("%d\n",ans);
  32. return ;
  33. }

思维定势--AtCoder Regular Contest 092 D - Two Sequences的更多相关文章

  1. AtCoder Regular Contest 092 B Two Sequences

    题目大意 给定两个长为 $n$ 个整数序列 $a_1, \dots, a_n$ 和 $b_1, \dots, b_n$ .求所有 $a_i + b_j$($1\le i, j\le n$)的 XOR ...

  2. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  3. Atcoder Regular Contest 092 D - Two Faced Edges(图论+bitset 优化)

    Atcoder 题面传送门 & 洛谷题面传送门 orz ymx,ymx ddw %%% 首先既然题目要我们判断强连通分量个数是否改变,我们首先就将原图 SCC 缩个点呗,缩完点后我们很自然地将 ...

  4. AtCoder Regular Contest 092 C - 2D Plane 2N Points(二分图匹配)

    Problem Statement On a two-dimensional plane, there are N red points and N blue points. The coordina ...

  5. AtCoder Regular Contest 092 C D E F

    C - 2D Plane 2N Points 题意 二维平面上有\(N\)个红点,\(N\)个蓝点,一个红点和一个蓝点能配成一对当且仅当\(x_r<x_b\)且\(y_r<y_b\). 问 ...

  6. Atcoder Regular Contest 092 A 的改编

    原题地址 题目大意 给定平面上的 $n$ 个点 $p_1, \dots, p_n$ .第 $i$ 点的坐标为 $(x_i, y_i)$ .$x_i$ 各不相同,$y_i$ 也各不相同.若两点 $p_i ...

  7. AtCoder Regular Contest 092 Two Sequences AtCoder - 3943 (二进制+二分)

    Problem Statement You are given two integer sequences, each of length N: a1,…,aN and b1,…,bN. There ...

  8. AtCoder Regular Contest 092 2D Plane 2N Points AtCoder - 3942 (匈牙利算法)

    Problem Statement On a two-dimensional plane, there are N red points and N blue points. The coordina ...

  9. 【AtCoder Regular Contest 092】C.2D Plane 2N Points【匈牙利算法】

    C.2D Plane 2N Points 题意:给定N个红点二维坐标N个蓝点二维坐标,如果红点横纵坐标都比蓝点小,那么它们能够构成一组.问最多能构成多少组. 题解:把满足要求的红蓝点连线,然后就是匈牙 ...

随机推荐

  1. iOS图片目录批量复制到android图片目录

    复制shell脚本 #!/bin/bash for i in `ls` do for imgname in `ls $i | grep '^WM.*'` do echo $imgname cp $i/ ...

  2. fun下载内容批量收集

    1.download title and url #!/usr/bin/env python #-*- coding:utf-8 -*- import re, urllib2,threading de ...

  3. ping 不通。无法访问目标主机

    台式机 使用无线网卡  又登录了VPN 有时候访问不了局域网内的主机 解决方案  添加路由即可 window+R 打开运行 输入cmd  然后输入 route add 10.16.1.89 10.13 ...

  4. 阿里Java架构师面试高频300题:集合+JVM+Redis+并发+算法+框架等

    前言 在过2个月即将进入9月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和 ...

  5. valgrind测试程序内存泄漏问题

    1.用wincap将valgrind放入系统任意路径下,解压 2.  登录主机后台在需要测试程序的路径下运行此行命令: /opt/valgrind/bin/valgrind ./itb(例) 3. 跑 ...

  6. AppCrawler自动化遍历使用详解(版本2.1.0 )(转)

    AppCrawle是自动遍历的app爬虫工具,最大的特点是灵活性,实现:对整个APP的所有可点击元素进行遍历点击.   优点: 1.支持android和iOS, 支持真机和模拟器 2.可通过配置来设定 ...

  7. python基础面试题整理---从零开始 每天十题(03)

    一.Q:用Python输出一个Fibonacci数列?(斐波那契额数列) A:我们先来看下代码 #!/usr/bin/env python # -*- coding: utf-8 -*- def fi ...

  8. 网络流的$\mathfrak{Dinic}$算法

    网络流想必大家都知道,在这不过多赘述.网络流中有一类问题是让你求最大流,关于这个问题,许多计算机学家给出了许多不同的算法,在这里--正如标题所说--我们只介绍其中的一种--\(\tt{Dinic}\) ...

  9. tp5 -- 腾讯云cos简单使用

    因项目需要,本来是需要对接阿里云oss,但因客户错误将云存储买成腾讯云cos,因此简单做了个对象上传使用 首先下载cos的sdk: 三种方式在文档上面都有介绍 SDK 安装有三种方式:Composer ...

  10. javase(5)_面向对象

    一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动 ...