题目大意比较简单,就是求一堆(二元组)的异或和。

思路:按位考虑,如果说第k位为1的话,那么一定有奇数个(二元组)在该位为1。二元组内的数是相加的,相加是可以进位的。所以第k位是0还是1,至于k为后边的数有关,所以我们直接(1<<(k+1))取模。取模后每个数的取值范围就是[0,2^(k+1)-1],二元组的取值范围就是[0,2^(k+2)-2]。

先把二元组看成一个数x,x的第k位是1, 那么x的取值范围就是[2^k,2^(k+1)-1]和[2^k+2^(k+1),2^(k+2)-2]。

解释一下为什么。因为x的取值为[0,2^(k+2)-2]。如果说k的左边没有1,那么取值范围就是010000...~~011111...,如果说k的左边有1,这里做多只能由一个1,如果k的左边有两个1的话那范围直接就是2^(k+2)+...肯定不对的,所以只能有一个1,那么范围就成了11000...~~11111...

然后将对每一个arr[i],在[1,i)的范围内查找j的个数。arr[j]的范围就是x-arr[i]了。查找的时候用二分。upper_bound和lower_bound要搭配使用。寻找上边界的时候用upper_bound,寻找下边界用lower_bound,至于为啥,自己举个例子就行了....

code:

#include<bits/stdc++.h>
using namespace std;
const int N=4e5+;
int arr[N];
int main(){
int n;
cin>>n;
for(int i=;i<=n;i++) cin>>arr[i];
int ans=;
for(int i=;i>=;i--){
for(int j=;j<=n;j++) arr[j]=arr[j]%(<<(i+));
sort(arr+,arr++n);
for(int j=;j<=n;j++)
{
if((upper_bound(arr+,arr+j,(<<(i+))--arr[j])-lower_bound(arr+,arr+j,(<<i)-arr[j]))&)
ans^=<<i;
if((upper_bound(arr+,arr+j,(<<(i+))--arr[j])-lower_bound(arr+,arr+j,(<<(i+))+(<<i)-arr[j]))&)
ans^=<<i;
}
}
cout<<ans<<endl;
return ;
}

Present CodeForces - 1323D (思维+二分)的更多相关文章

  1. codeforces 1165F1/F2 二分好题

    Codeforces 1165F1/F2 二分好题 传送门:https://codeforces.com/contest/1165/problem/F2 题意: 有n种物品,你对于第i个物品,你需要买 ...

  2. Educational Codeforces Round 60 C 思维 + 二分

    https://codeforces.com/contest/1117/problem/C 题意 在一个二维坐标轴上给你一个起点一个终点(x,y<=1e9),然后给你一串字符串代表每一秒的风向, ...

  3. CF思维联系– CodeForces - 991C Candies(二分)

    ACM思维题训练集合 After passing a test, Vasya got himself a box of n candies. He decided to eat an equal am ...

  4. Codeforces Round #626 Div2 D. Present(位掩码,二分)

    题目链接:https://codeforces.com/contest/1323/problem/D 题意:给了大小为4e5的数组a,其中1<=ai<=1e7.求所有点对和的异或和,即: ...

  5. Voltage Keepsake CodeForces - 801C (思维+二分)

    题目链接 这是一道很棒的二分题. 思路: 首先先思考什么情况下是可以无限的使用,即输出-1. 我们思考可知,如果每一秒内所有设备的用电量总和小于等于充电器每秒可以充的电,那么这一群设备就可以无限使用. ...

  6. 【Codeforces】894D. Ralph And His Tour in Binary Country 思维+二分

    题意 给定一棵$n$个节点完全二叉树,$m$次询问,每次询问从$a$节点到其它所有节点(包括自身)的距离$L$与给定$H_a$之差$H_a-L$大于$0$的值之和 对整棵树从叶子节点到父节点从上往下预 ...

  7. Educational Codeforces Round 53C(二分,思维|构造)

    #include<bits/stdc++.h>using namespace std;const int N=1e6+6;int x[N],y[N];int sx,sy,n;char s[ ...

  8. codeforces 732D(二分)

    题目链接:http://codeforces.com/contest/732/problem/D 题意:有m门需要过的课程,n天的时间可以选择复习.考试(如果的d[i]为0则只能复习),一门课至少要复 ...

  9. CodeForces 359D (数论+二分+ST算法)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319 题目大意:给定一个序列,要求确定一个子序列,①使得该子序 ...

随机推荐

  1. PU Learning简介:对无标签数据进行半监督分类

    当只有几个正样本,你如何分类无标签数据 假设您有一个交易业务数据集.有些交易被标记为欺诈,其余交易被标记为真实交易,因此您需要设计一个模型来区分欺诈交易和真实交易. 假设您有足够的数据和良好的特征,这 ...

  2. 微信小程序api封装

    写多 之后,吸取之前的经验,瞎写了一个简单的封装api,有幸看到的朋友,就随便看看哈,如果能给到你帮助就一直棒了,额呵呵呵! 新建constant.js和api.js文件 在constant.js中统 ...

  3. 贪心-谷歌-857. 雇佣 K 名工人的最低成本

    2020-03-15 22:00:39 问题描述: 有 N 名工人. 第 i 名工人的工作质量为 quality[i] ,其最低期望工资为 wage[i] . 现在我们想雇佣 K 名工人组成一个工资组 ...

  4. OpenCV-Python 霍夫圈变换 | 三十三

    学习目标 在本章中, 我们将学习使用霍夫变换来查找图像中的圆. 我们将看到以下函数:cv.HoughCircles() 理论 圆在数学上表示为(x−xcenter)2(y−ycenter)2=r2(x ...

  5. nodejs 配置代理服务器

    const express = require('express'); const proxy = require('http-proxy-middleware'); const cors = req ...

  6. php _weakup()反序列化漏洞

    概念&原理 序列化就是使用 serialize() 将对象用字符串的方式进行表示: 反序列化是使用 unserialize() 将序列化的字符串构造成相应的对象,为序列化的逆过程. 序列化的对 ...

  7. Sql练习201908210951

    表结构: create table SalePlan ( PlanId ,) primary key, GoodsId int, PlanPrice decimal(,) ); go create t ...

  8. Python面向对象之异常处理

    1:什么是异常 异常就是在我们的程序在运行过程中由于某种错误而引发Python抛出的错误: 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序 ...

  9. 三层架构之UI层

    之前已经发表了BLL,DAL,MODEL,三个层的源码 继续UI层: 先简单实现用户的登录及注册 高级操作可按照上一篇文章进行源码完善 如图所示↑ UI层目录文件 Reg.aspx 进行注册操作  & ...

  10. 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\vue.ps1,因为在此系统··········

    网上百度了下,解决方案是: 1. 以管理员身份运行PowerShell2. 执行:get-ExecutionPolicy,回复Restricted,表示状态是禁止的3.执行:set-Execution ...