HDU 5270 ZYB loves Xor II 异或,贡献,双指针.
来源:互联网 发布:linux连接数 编辑:程序博客网 时间:2024/06/09 18:10
HDU 5270
题意:给出长度为n的序列a和序列b,问序列c[k]=(a[i]+b[j]) [i=1..n,j=1..n] 的异或和.
n<=1e5,a[i],b[i]<=1e18.
序列c中总共n^2个数,考虑每个位的贡献? 设异或的结果为res
假如res总共有60位 考虑第i位是0还是1. 也就是求出c[k]=(a[i]+b[j])中第i位为1的个数?
考虑第i位时,方便计算,先舍去高位.
若第i位为1 则相加的数x满足2^i<=x<2^(i+1) 或者 2^i+2^(i+1)<=x<2^(i+2)
题意:给出长度为n的序列a和序列b,问序列c[k]=(a[i]+b[j]) [i=1..n,j=1..n] 的异或和.
n<=1e5,a[i],b[i]<=1e18.
序列c中总共n^2个数,考虑每个位的贡献? 设异或的结果为res
假如res总共有60位 考虑第i位是0还是1. 也就是求出c[k]=(a[i]+b[j])中第i位为1的个数?
考虑第i位时,方便计算,先舍去高位.
若第i位为1 则相加的数x满足2^i<=x<2^(i+1) 或者 2^i+2^(i+1)<=x<2^(i+2)
将序列c,d排序后 枚举c[i],双指针维护序列d中满足条件的区间即可.
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=2e5+20,M=61;ll pw[80],a[N],b[N],c[N],d[N];ll x[N];void init(){ pw[0]=1; x[0]=1; for(int i=1;i<=M+1;i++) pw[i]=pw[i-1]*2ll,x[i]=x[i-1]*2+1ll;}int main(){ int T,n,cas=0; cin>>T; init(); while(T--) { ll ans=0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); for(int i=1;i<=n;i++) scanf("%lld",&b[i]); for(int k=0;k<=M;k++) { for(int i=1;i<=n;i++) { c[i]=x[k]&a[i];//mod d[i]=x[k]&b[i]; } sort(c+1,c+1+n); sort(d+1,d+1+n); int le=n,rg=n; int st=n,ed=n; int num=0; for(int i=1;i<=n;i++) { // 2^i<=x<2^(i+1) while(le>=1&&d[le]+c[i]>=pw[k]) le--; while(rg>=1&&d[rg]+c[i]>=pw[k+1]) rg--; //2^i+2^(i+1)<=x<2^(i+2) while(st>=1&&d[st]+c[i]>=pw[k]+pw[k+1]) st--; while(ed>=1&&d[ed]+c[i]>=pw[k+2]) ed--; num+=rg-le; if(ed>=1) num+=ed-st; } if(num%2) ans+=pw[k]; } printf("Case #%d: %lld\n",++cas,ans); } return 0;}
阅读全文
0 0
- HDU 5270 ZYB loves Xor II 异或,贡献,双指针.
- hdu 5270 ZYB loves Xor II
- HDU 5269 ZYB loves Xor I 贡献+Trie
- hdu 5269 ZYB loves Xor I
- hdu 5269 ZYB loves Xor I
- hdu 5269 ZYB loves Xor I
- HDU 5269 ZYB loves Xor I
- HDU-5269 ZYB loves Xor I
- HDU 5269 && BestCoder #44 1002 ZYB loves Xor I (分治)
- HDU 5269 ZYB loves Xor I( 01 Trie 树)
- hdu 5269 ZYB loves Xor I && BestCoder Round #44
- HDU 5269 ZYB loves Xor I [01字典树]【思维】
- HDU 5269 ZYB loves Xor I(位运算)
- HDU 5269 ZYB loves Xor I 01trie
- hdu 5269 ZYB loves Xor I(字典树)
- hdu 5269 ZYB loves Xor I(字典树)
- 字典树 hdu5269 ZYB loves Xor I
- BestCoder#44 ZYB loves Xor I
- 三层交换机实现路由功能配置示例与详解 (Cisco Packer Tracer 模拟器)
- Spark Scala 分组排序取TopN
- Vijos P1077 克隆龙
- CIA3 Sometimes Naive(莫比乌斯反演+积性函数前缀和)
- hive演示
- HDU 5270 ZYB loves Xor II 异或,贡献,双指针.
- INNER JOIN 数据库查询
- go 压缩文件操作
- Remove Duplicates from Sorted Array
- HDU 4300 Clairewd’s message (方法巧妙)
- ajax 发送post请求
- SparkSQL演示
- java基础知识(一)--DOS操作
- Java中TreeSet的用法