Beautiful Subarrays (01字典树 瞎搞)
题意:
题解:
一看问的是子序列,并且还是异或。
首先想到01字典树,再一看让你求子序列的个数,大致是想让你把这个序列进行前缀异或处理后然后再01字典树上进行操作吧。
假设01字典树往左边是0右边是1
对于如何寻找k这个值,肯定是顺着k这个值对应的链下去,那么对于这条链右边的链来说,值都是大于k的。那么我们在递归k的时候,对于右边的链直接把他们的个数给加上即可。这题比较难处理的是对于异或前缀的一个转换。
特别注意叶子节点需要特判一下。
大佬的代码:
#include<bits/stdc++.h>
//#define int long long
using namespace std;
#define ll long long
const int maxn = 1e6+10+1;int trie[maxn*32][2];
ll cnt[maxn*32];
int tot=1; //从一开始是因为node起点为1,node从1开始是防止node=0的干扰
void ins(int x){int node=1;for(int i=31;i>=0;i--){int t=(x>>i)&1;if(!trie[node][t]){trie[node][t]=++tot;}node=trie[node][t];cnt[node]++;}
}
ll query(int x,int k){int node=1;ll res=0;for(int i=31;i>=0;i--){int now=(x>>i)&1;int t=(k>>i)&1;if(t==1) node=trie[node][!now];else{res+=cnt[trie[node][!now]];node=trie[node][now];}}res+=cnt[node];return res;
}signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n,k;cin>>n>>k;int pre=0;ll ans=0;ins(0);for(int i=1;i<=n;i++){int x;cin>>x;pre^=x;ans+=query(pre,k);ins(pre);}cout<<ans<<endl;
}
我的沙口代码:
#include<bits/stdc++.h>
//#define int long long
using namespace std;
#define ll long long
const int maxn = 1e6+10+1;int trie[maxn*32][2];
ll cnt[maxn*32];
int tot;
void ins(int x){int node=0;for(int i=31;i>=0;i--){int t=(x>>i)&1;if(!trie[node][t]){trie[node][t]=++tot;}node=trie[node][t];cnt[node]++;}
}
ll query(int x,int k){int node=0;ll res=0;for(int i=31;i>=0;i--){int now=(x>>i)&1;int t=(k>>i)&1;//cout<<"pre now "<<i<<" "<<now<<" "<<t<<endl; //末尾结点的处理if(i==0){if(now==1) res+=cnt[trie[node][t^1]];else res+=cnt[trie[node][t]];//break;}if(now==1&&t==0){if(trie[node][t]) res+=cnt[trie[node][t]];if(trie[node][1]) node=trie[node][1];else break;}if(now==1&&t==1){if(trie[node][0]) node=trie[node][0];else break;}if(now==0&&t==0){if(trie[node][1]) res+=cnt[trie[node][1]];if(trie[node][t]) node=trie[node][t];else break;}if(now==0&&t==1){if(trie[node][t]) node=trie[node][t];else break;}}return res;
}signed main() {ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n,k;cin>>n>>k;int pre=0;ll ans=0;ins(0);for(int i=1;i<=n;i++){int x;cin>>x;//if(x>=k) ans++;pre^=x;//cout<<"debug "<<pre<<endl;ans+=query(pre,k);ins(pre);//cout<<"debug "<<ans<<endl;}cout<<ans<<endl;
}
Beautiful Subarrays (01字典树 瞎搞)相关推荐
- zcmu-1783(01字典树)
1783: 秋实大哥与快餐店 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 78 Solved: 12 [Submit][Status][Web B ...
- hdu5296 01字典树
根据二进制建一棵01字典树,每个节点的答案等于左节点0的个数 * 右节点1的个数 * 2,遍历整棵树就能得到答案. AC代码: #include<cstdio> using namespa ...
- 奶牛异或(01字典树)
题意: 让你找一个连续区间异或和最大,如果有相同的,则输出断点较小的. 题解: 01字典树,利用前缀和的思想进行求解,我们在插入前缀的同时,也在不断的更新最大值. 我们查询当前 二进制字符串与已经插入 ...
- hdu-4825(01字典树)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- HDU4825 Xor Sum 01字典树(Tire Tree)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- codeforces 842 D. Vitya and Strange Lesson(01字典树+思维+贪心)
题目链接:http://codeforces.com/contest/842/problem/D 题解:像这种求一段异或什么的都可以考虑用字典树而且mex显然可以利用贪心+01字典树,和线段树差不多就 ...
- 字典树-01字典树基础
字典树-01字典树 什么是字典树? 字典树,又叫前缀树,Trie树,通常被用作字符串匹配. 它的实现原理是什么? 先建立一颗树,对于这棵树上每个节点i与其后继节点间的连线,都有存入一个字符. 对于存图 ...
- Codechef REBXOR HYSBZ - 4260(01字典树+区间异或最大)
Input 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,-,AN. Output 输出一行包含给定表达式可能的最大值. Sample Input 5 1 2 ...
- 【CodeForces - 706D】Vasiliy's Multiset(01字典树)
题干: Author has gone out of the stories about Vasiliy, so here is just a formal task description. You ...
最新文章
- 《云计算:概念、技术与架构》一2.3 案例研究3:Innovartus
- K8S Runtime CRI OCI contained dockershim 理解(转)
- java json设置编码_我们如何用Java编码JSON对象?
- python中自带的三个装饰器
- android读取外部图片,Android读取本地图库与调用摄像头拍摄
- jmeter所有版本下载地址分享
- 【python数据挖掘课程】十二.Pandas、Matplotlib结合SQL语句对比图分析
- HTML <cite> 标签
- C# 将List中的数据导入csv文件中
- [蛋蛋の插画日记]囧...居然漏了一期《可爱100》!
- 浮点数赋值给整数_初学者专题:变量和赋值
- SQL9 查找除复旦大学的用户信息(数据库否定语句写法)
- 主板后置音频接口图解_颜值出众、用料靠谱——华擎(ASRock)Z490 Extreme4极限玩家主板 简析...
- Matlab怎样将传递函数转换成差分方程
- html是非结构数据吗,Python处理非结构数据
- 配置ANDROID开发环境的方法
- keydown - keypress - keyup 用法和区别
- 批处理获取网卡名称(附修改IP、网关、DNS脚本)
- Axure RP8介绍
- reg类型变量综合电路_基本门电路逻辑符号.doc
热门文章
- 解决kalilinux: E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/
- 硬肝!超详细matplotlib基础介绍!!!
- 【号外】来人鸭~ 本公众号纳新啦~
- 服务器性能估算参考(硬件-分析数据库)
- 高精度地图量产难,四维图新利用优势准备实现突破
- CentOS之——CentOS7安装iptables防火墙
- 转:MySQL 开发实践 8 问,你能 hold 住几个?
- 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)
- Action Golf 四个魔法球实战训练系列_huatuo_新浪博客
- UI基础 - UIScrollView