2017.10.12 小Q的无敌异或 失败总结
来源:互联网 发布:手机淘宝查看订单编号 编辑:程序博客网 时间:2024/06/02 16:08
第一问是可以O(n)的
二进制位是独立的,所以直接分开算即可。。
记一个前缀和,开桶装0、1的个数 然后每次新加入一个点就直接更新就可以了
第二问就比较难了,,手玩只能发现最低位可以这么搞,对于高位还要考虑借位情况,借位情况有0有1,就不好离散
但是这么做是可以做出来的。。只是要在模意义下进行,,再考虑每次-的过程,都是一个前缀和-比他靠前的前缀和,
当差值>枚举次数时,显然影响是1
差值要考虑进位的情况,,这样似乎就形成了一个偏序关系,,就可以用树状数组了。。
码(借鉴):
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define ll long long#define P 998244353ll ans,n,j,i,k,lin,er[50],he[50][100005],lie[100005],dui[100005],v[100005],a[100005],tong[100006],p[100005]; int lowbit(int a){ return a&(-a);} void jia(int o,int z){ for(;o<=dui[0];o+=lowbit(o)) { v[o]^=z; } }int cha(int o){ int ans=0; for(;o;o-=lowbit(o)) { ans^=v[o]; }return ans;}int find(ll o){ if(o<0)return 0; int l=1,r=dui[0]+1; while(l+1<r) { int mid=(l+r)>>1; if(dui[mid]<=o)l=mid; else r=mid; } return l;} int main(){ er[0]=1; for(i=1;i<=40;i++) er[i]=er[i-1]*2; scanf("%lld",&n); for(i=1;i<=n;i++) { scanf("%lld",&a[i]); } for(i=0;i<=20;i++) for(j=1;j<=n;j++) { he[i][j]=he[i][j-1]^(a[j]&er[i]); if(he[i][j]&er[i])tong[i]++; } for(i=0;i<=20;i++) { for(j=1;j<=n;j++) { ans=1ll*(ans+1ll*tong[i]*er[i])%P; if(a[j]&er[i]) { tong[i]=(n-j)-(tong[i]-1); } } } printf("%lld ",ans); ans=0; for(i=1;i<=n;i++)he[0][i]=he[0][i-1]+a[i]; for(k=0;k<=37;k++){ for (i=0; i<=n; i++) tong[i]=p[i]=he[0][i]&(er[k+1]-1); dui[0]=0; sort(tong,tong+n+1); dui[++dui[0]]=tong[0]; memset(v,0,sizeof(v)); for (i=1; i<=n; i++) if (tong[i]!=tong[i-1]) dui[++dui[0]]=tong[i]; int lin=0; for (i=0; i<=n; i++){ lin^=cha(find(p[i]-er[k]))^cha(find(p[i]))^cha(find(p[i]+er[k])); //cout<<er[k]<<" "<<lin<<" "; jia(find(p[i]),1); } //cout<<lin<<endl; if (lin) ans|=er[k]; } printf("%lld",ans);}
阅读全文
0 0
- 2017.10.12 小Q的无敌异或 失败总结
- BZOJ 4017 小Q的无敌异或
- bzoj 4017 小Q的无敌异或
- bzoj4017 小Q的无敌异或 数学
- 【bzoj4017】小Q的无敌异或 树状数组
- BZOJ4017 小Q的无敌异或 好题
- 小Q的无敌异或(第一问)
- xian 区域赛 g bzoj 4017: 小Q的无敌异或
- bzoj 4017 小Q的无敌异或(所有子区间异或的和 与和的异或)
- 超无敌搞笑的 Q 版语文 ^_^
- 小 Q 的棋盘
- 异或 算法 小总结
- 异或应用小总结
- cqoi2017,bzoj4813小Q的棋盘(树形dp或瞎搞)
- 【CQOI2017】小Q的棋盘
- CQOI2017 小Q的棋盘
- 异或与Tire 树 小总结
- NYOJ 懂懒事的小明(小明真厉害,无敌了)
- Linux时间子系统之三:时间的维护者:timekeeper
- C#动态创建窗口和创建事件,在新窗口添加控件和控件事件
- web信息搜索之域名遍历篇
- 九度oj:求哈夫曼树(vector)
- 论list内部数据排序
- 2017.10.12 小Q的无敌异或 失败总结
- 怎样设置路由器端口映射(以TP-Link为例)?
- 探究Exported属性对startActivity的影响
- Vue 学习笔记1之安装
- Linux下安装php
- Kubernetes部署master节点
- stanford python中文分词
- 虚拟继承和菱形虚拟继承的剖析
- python shell命令行中import多层目录下的模块