思维定势--AtCoder Regular Contest 092 D - Two Sequences
$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,在我国古代智慧中国象棋中也有这种想法。《梦入神机》中就有记载一篇名为《退一步胜》的残局,引用如下,转侵删:
好不引用了刷题去。
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
//#include<queue>
//#include<time.h>
//#include<complex>
#include<algorithm>
#include<stdlib.h>
using namespace std; int n;
#define maxn 200011
int a[maxn],b[maxn],na[maxn],nb[maxn];
int main()
{
scanf("%d",&n); for (int i=;i<=n;i++) scanf("%d",&a[i]); for (int i=;i<=n;i++) scanf("%d",&b[i]);
int ans=;
for (int i=;i<=;i++)
{
for (int j=;j<=n;j++) na[j]=a[j]&((<<(i+))-),nb[j]=b[j]&((<<(i+))-);
sort(nb+,nb++n); int t1=<<i,t2=*t1,t3=*t1,t4=*t1;
int now=;
for (int j=;j<=n;j++)
{
now^=(lower_bound(nb+,nb++n,t2-na[j])-lower_bound(nb+,nb++n,t1-na[j]))&;
now^=(lower_bound(nb+,nb++n,t4-na[j])-lower_bound(nb+,nb++n,t3-na[j]))&;
}
ans|=now<<i;
}
printf("%d\n",ans);
return ;
}
思维定势--AtCoder Regular Contest 092 D - Two Sequences的更多相关文章
- 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 ...
- AtCoder Regular Contest 092
AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...
- Atcoder Regular Contest 092 D - Two Faced Edges(图论+bitset 优化)
Atcoder 题面传送门 & 洛谷题面传送门 orz ymx,ymx ddw %%% 首先既然题目要我们判断强连通分量个数是否改变,我们首先就将原图 SCC 缩个点呗,缩完点后我们很自然地将 ...
- 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 ...
- AtCoder Regular Contest 092 C D E F
C - 2D Plane 2N Points 题意 二维平面上有\(N\)个红点,\(N\)个蓝点,一个红点和一个蓝点能配成一对当且仅当\(x_r<x_b\)且\(y_r<y_b\). 问 ...
- Atcoder Regular Contest 092 A 的改编
原题地址 题目大意 给定平面上的 $n$ 个点 $p_1, \dots, p_n$ .第 $i$ 点的坐标为 $(x_i, y_i)$ .$x_i$ 各不相同,$y_i$ 也各不相同.若两点 $p_i ...
- 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 ...
- 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 ...
- 【AtCoder Regular Contest 092】C.2D Plane 2N Points【匈牙利算法】
C.2D Plane 2N Points 题意:给定N个红点二维坐标N个蓝点二维坐标,如果红点横纵坐标都比蓝点小,那么它们能够构成一组.问最多能构成多少组. 题解:把满足要求的红蓝点连线,然后就是匈牙 ...
随机推荐
- leetcode_1049. Last Stone Weight II_[DP]
1049. Last Stone Weight II https://leetcode.com/problems/last-stone-weight-ii/ 题意:从一堆石头里任选两个石头s1,s2, ...
- 并查集+思维——X-Plosives
一.问题描述(题目链接) 有n种化合物,每种化合物由两种元素组成.当几种的化合物数量等于他们所含不同元素的数量时,就会发生爆炸.现在依次给出化合物的组成,当新的化合物与之前的化合物放在一起会发生爆炸时 ...
- iview 验证 trigger: 'blur,change', 同时加两个,省的每次还想input 还是 select
iview 验证 trigger: 'blur,change', 同时加两个,省的每次还想input 还是 select dataRuleValidate: { name: [{ required: ...
- syslog(),closelog()与openlog()--日志操作函数 (2)
文章出处:http://blog.chinaunix.net/uid-26583794-id-3166083.html 守护进程日志的实现 syslogd守护进程用于解决守护进程的日志记录问题,而日志 ...
- MySQL插入SQL语句后在phpmyadmin中注释显示乱码
自己写一个建一个简单的数据表,中间加了个注释,但是用PHPmyadmin打开后发现注释不对. 就先查询了一下sql 语句 发现SQL 语句并没有问题,感觉像是显示编码的问题,就先用set names ...
- Bootstrap历练实例:基本按钮群组
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- 830. Positions of Large Groups@python
In a string S of lowercase letters, these letters form consecutive groups of the same character. For ...
- MySQL Group Replication(组复制MGR)
MGR基本要求: 1.InnoDB存储引擎 2.主键,每个表必须具有已定义的主键或等效的主键,其中等效项是非null唯一键 3.IPv4网络 4.网络性能 5.开启二进制日志并开启GTID模式 6.m ...
- centos配置本地yum源和光盘挂载
说明:以centos6.5为例创建本地yun源,centos7的创建方法和centos6的是一样的. 创建挂载目录: mkdir /dvd 开机自动挂载光盘 echo /dev/cdrom /dv ...
- mysql 导入数据库
1:创建数据库 dos 进入 xxx\MySQL5.7\bin 目录(很多人喜欢把这个路径配置在环境变量path中,这样在dos敲命令时,就直接是mysql......) mysql -uroot - ...