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. std::string::append函数

    string& append (const string& str); string& append (const string& str, size_t subpos ...

  2. 数据结构和算法(Golang实现)(5)简单入门Golang-接口

    接口 在Golang世界中,有一种叫interface的东西,很是神奇. 一.数据类型 interface{} 如果你事前并不知道变量是哪种数据类型,不知道它是整数还是字符串,但是你还是想要使用它. ...

  3. Starlims Client Request Portal 客户申请门户

    用户可以直接在starlims对外的"客户申请门户"上发起检验申请,并追踪检验进度等. 工作流程图示如下:

  4. L2 Softmax与分类模型

    softmax和分类模型 内容包含: softmax回归的基本概念 如何获取Fashion-MNIST数据集和读取数据 softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集 ...

  5. stand up meeting 12/11/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 完成单词释义热度排序:允许用户自主添加释义:完成了button位置的修正(finally)和弹窗的美化:     6 tr ...

  6. asp.net core webapi 配置跨域处理

    在Startup.cs文件中的ConfigureServices方法中加入如下代码: //配置跨域处理 services.AddCors(options => { options.AddPoli ...

  7. 2. Git-命令行-删除本地和远程分支

    命令行方式 Git Bash: 切换到要操作的项目文件夹 命令行 : $ cd <ProjectPath> 查看项目的分支们(包括本地和远程) 命令行 : $ git branch -a ...

  8. react引入图片不显示问题

    在react 中引入图片的方式和正常不同,,很容易引入不显示 引入本地图片 1.(采用组件式引入方法) import Logo from "图片路径" <img src={L ...

  9. ApiPost的预执行脚本和后执行脚本

    ApiPost的预执行脚本和后执行脚本主要是用来定义变量.但是它们有什么区别呢? 预执行脚本 在当前接口发送请求前执行的脚本,可以理解为beforeSend的时候执行. 一般在这里,我们可以设置一些前 ...

  10. ubuntu下载速度慢的解决办法--修改下载源

    操作:https://blog.csdn.net/qq_24326765/article/details/81916222 推荐源:https://blog.csdn.net/qq_36328643/ ...