D. Present

题目大意:给你一个大小是n的序列,求两两之间相加进行异或之后的答案。

这个题目我并没有想到怎么写,有点偷懒于是就去看了题解。。

题解很套路。。。

题解:

因为这个是用到了异或,所以不可避免的肯定要用到二进制。

所以考虑进行拆位,当我要考虑第 \(i\) 位,那么比这一位高的都不会产生影响,所以对所有的数取模处理一下,然后再枚举每一个数满足条件的一个区间,这个可以二分来解决。

因为每一个数的区间是 \(0=<a_i<=2^{i+1}-1\),所以之和的区间是 \(0<=a_i<=2^{i+2}-2\)

条件:

  • 两个数之和在 \([2^i,2^{i+1}-1]\)
  • 两个数之和在 \([2^{i+1}+2^i,2^{i+2}-2]\)
//我还以为会wa,比较复杂度我大致算了一下可能会超时一点点。。
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn=4e5+7;
typedef long long ll;
int a[maxn],bit[maxn],n;
int Ans[maxn];
int judgemin(int sum,int x,int y){
// printf("min sum=%d x=%d\n",sum,x);
int l=1,r=y,ans=inf;
while(l<=r){
int mid=(l+r)>>1;
// printf("mid=%d bit=%d\n",mid,bit[mid]);
int all=bit[mid]+x;
if(all>=sum) ans=mid,r=mid-1;
else l=mid+1;
}
return ans;
}
int judgemax(int sum,int x,int y){
// printf("max sum=%d x=%d\n",sum,x);
int l=1,r=y,ans=0;
while(l<=r){
int mid=(l+r)>>1;
// printf("bit[%d]=%d\n",mid,bit[mid]);
int all=bit[mid]+x;
if(all<=sum) ans=mid,l=mid+1;
else r=mid-1;
}
return ans;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=0;i<=25;i++){
int mod=1<<(i+1),ans=0;
// printf("mod=%d\n",mod);
for(int j=1;j<=n;j++) bit[j]=a[j]%mod;
sort(bit+1,bit+1+n);
for(int j=1;j<=n;j++){
int x=bit[j];
// printf("j=%d bit[%d]=%d\n",j,j,bit[j]);
int lc=judgemin(1<<i,x,j-1),rc=judgemax(mod-1,x,j-1);
// printf("fi lc=%d rc=%d\n",lc,rc);
ans+=max(0,rc-lc+1);
lc=judgemin((1<<(i+1))+(1<<i),x,j-1),rc=judgemax((1<<(i+2))-2,x,j-1);
// printf("se lc=%d rc=%d\n",lc,rc);
ans+=max(0,rc-lc+1);
}
Ans[i]=(ans&1);
// printf("Ans[%d]=%d\n",i,Ans[i]);
}
int ans=0;
for(int i=25;i>=0;i--){
ans=ans*2+Ans[i];
}
printf("%d\n",ans);
return 0;
}

Codeforces Round #626 D. Present的更多相关文章

  1. Codeforces Round #626 Div2 D,E

    比赛链接: Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present 题意: 给定大 ...

  2. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)

    A. Even Subset Sum Problem 题意 给出一串数,找到其中的一些数使得他们的和为偶数 题解 水题,找到一个偶数或者两个奇数就好了 代码 #include<iostream& ...

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

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

  4. Codeforces Round #626 (Div. 2) D. Present(位运算)

    题意: 求n个数中两两和的异或. 思路: 逐位考虑,第k位只需考虑0~k-1位,可通过&(2k+1-1)得到一组新数. 将新数排序,当两数和在[2k,2k+1)和[2k+1+2k,2k+2)之 ...

  5. Codeforces Round #626 (Div. 2)

    Contest Info Practice Link Solved A B C D E F 4/6 O Ø Ø  Ø  Ø  - O 在比赛中通过 Ø 赛后通过 ! 尝试了但是失败了 - 没有尝试 S ...

  6. Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)部分(A~E)题解

    (A) Even Subset Sum Problem 题解:因为n非常非常小,直接暴力枚举所有区间即可. #include<bits/stdc++.h> using namespace ...

  7. Codeforces Round #626 (Div. 2) B. Count Subrectangles

    题目连接:https://codeforces.com/contest/1323/problem/B 题意:给一个大小为n的a数组,一个大小为m的b数组,c数组是二维数组c[i][j]=a[i]*b[ ...

  8. Codeforces Round #626 (Div. 2) E. Instant Noodles(二分图,最大公因数)

    题意: 给你一个二分图,求左侧端点的所有可能子集中的点相连的右侧端点的权值的和的最大公因数. 题解: 若所有右侧端点均不在同一左侧子集中,则求所有权值的最大公因数即可 . 否则,将在相同左侧子集中的右 ...

  9. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

随机推荐

  1. C#多线程(4):进程同步Mutex类

    Mutex 类 构造函数和方法 系统只能运行一个程序的实例 解释一下上面的示例 接替运行 进程同步示例 另外 Mutex 类 Mutex 中文为互斥,Mutex 类叫做互斥锁.它还可用于进程间同步的同 ...

  2. 010-字符串-C语言笔记

    010-字符串-C语言笔记 学习目标 1.[掌握]二维数组的声明和初始化 2.[掌握]遍历二维数组 3.[掌握]二维数组在内存中的存储 4.[掌握]二维数组与函数 5.[掌握]字符串 一.二维数组的声 ...

  3. 【python系统学习14】类的继承与创新

    目录: 目录: [toc] 类的继承 子类和父类 继承的写法 继承示例 父类可以被无限个子类所继承 子类实例可调用父类属性和方法 类的始祖(根类) 根类 - object 实例归属判断 - isins ...

  4. c++ 启发式搜索解决八数码问题

    本文对八数码问题 启发式搜索 (C++)做了一点点修改 //fn=gn+hn #include<iostream> #include<queue> #include<st ...

  5. webWMS开发过程记录(二)- WMS是什么

    (参考:WMS-百度百科) 简介 WMS是仓库管理系统(Warehouse Management System)的缩写,是一款标准化.智能化过程导向管理的仓库管理软件仓库管理系统,是通过出入库业务.仓 ...

  6. I. 蚂蚁上树

    蚂蚁上树(Sauteed Vermicelli with minced Pork),又名肉末粉条,是四川省及重庆市的特色传统名菜之一.因肉末贴在粉丝上,形似蚂蚁爬在树枝上而得名.这道菜具体的历史,已不 ...

  7. Gradle系列之Groovy基础篇

    原文发于微信公众号 jzman-blog,欢迎关注交流. 上一篇学习了 Gradle 的入门知识,Gradle 基于 Groovy,今天学习一下 Groovy 的基础知识,Groovy 是基于 JVM ...

  8. 【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务

    在我的上一篇文章中,我展示了如何使用ASP.NET Core创建Quartz.NET托管服务并使用它来按计划运行后台任务.不幸的是,由于Quartz.NET API的工作方式,在Quartz作业中使用 ...

  9. 3. pkg

    程序打包成可执行文件(.exe) 1.)  npm install -g pkg 2.)  单个文件:pkg entrance.js ( windows: pkg -t win entrance.js ...

  10. XCTF两个PHP代码审计的笔记

    题目源码如下,考点是输入的$id和$row['id']的区别 关键在于红框内,可以知道题目的payload是要让$row['id']存在,查询的到数据,并且要让POST的id不能与adog相同.那显而 ...