一道trie树的好题

首先我们发现后手对x的操作就是将x左移一位,溢出位在末尾补全

那么我们也可以理解为现将初值进行该操作,再将前i个元素异或和进行操作,与上等同。

那么我们等于转化了问题:

    我们求出m+1个数(前i个元素进行操作,再异或后面元素),并从1-2^n中找到一个数使最小值最大

(当然数已经进行溢出操作了)。

于是我们联想到trie树.........

    1.建出m+1个数的trie树

    2.对于从高位到低位的搜索,

      若是当前只有1或0有节点,我们都有办法使结果当前位是1,那么或上这个位的1

      若是都有,因为当前是高位,后手当然会把改为搞成0

      若是无节点统计答案,返回

时间复杂度(nm),注意数组开为节点×50

 1 #include<iostream>
2 #include<cstdio>
3 #include<string>
4 #include<algorithm>
5 #include<cmath>
6 #include<vector>
7 #include<map>
8 #include<cstring>
9 #define int long long
10 #define MAXN 101000
11 using namespace std;
12 int T[MAXN*50][3];int deep[MAXN*50];
13 int tot=1;
14 int summ,base;
15 int bin[MAXN];
16 int n,m,a[MAXN];int pre[MAXN];
17 int read()
18 {
19 int x=0;char c=getchar();
20 while(c<'0'||c>'9')c=getchar();
21 while(c>='0'&&c<='9')
22 {
23 x=(x<<1)+(x<<3)+(c^48);c=getchar();
24 }
25 return x;
26 }
27 void build(int x)
28 {
29 int p=1;
30 //printf("x=%lld ",x);
31 for(int i=n-1;i>=0;--i)
32 {
33 int th=((x>>i)&1);
34 //printf("i=%lld th=%lld\n",i,th);
35 if(T[p][th]==0)T[p][th]=++tot;
36 deep[T[p][th]]=bin[i];
37 p=T[p][th];
38 }
39
40 }
41 int maxn=0,ans=0;
42 void find(int p,int sum)
43 {
44 // printf("p=%lld sum=%lld\n",p,sum);
45 if((T[p][0]!=0&&T[p][1]==0))
46 {
47 sum|=deep[T[p][0]];
48 find(T[p][0],sum);
49 }
50 else if(T[p][0]==0&&T[p][1]!=0)
51 {
52 sum|=deep[T[p][1]];
53 find(T[p][1],sum);
54 }
55 else if(T[p][0]!=0&&T[p][1]!=0)
56 {
57 find(T[p][0],sum);
58 find(T[p][1],sum);
59 }
60 else
61 {
62 if(sum>maxn)
63 {
64 maxn=sum;
65 ans=1;
66 }
67 else if(sum==maxn)
68 {
69 ans++;
70 }
71 return ;
72 }
73 return ;
74 }
75 signed main()
76 {
77 n=read();m=read();
78 base=(1<<n);
79 pre[0]=0;
80 bin[0]=1;for(int i=1;i<=n;++i)bin[i]=(bin[i-1]<<1);
81 for(int i=1;i<=m;++i)
82 {
83 a[i]=read();
84 summ^=a[i];
85 pre[i]=pre[i-1]^a[i];
86 }
87 for(int i=0;i<=m;++i)
88 {
89 int sur=summ^pre[i],s;
90 s=((2*pre[i]/base)+2*pre[i])%base;
91 s^=sur;
92 build(s);
93 }
94 find(1,0);
95 printf("%lld\n%lld\n",maxn,ans);
96 }

【模拟8.01】big(trie树)的更多相关文章

  1. [CSP-S模拟测试]:big(Trie树+贪心)

    题目描述 你需要在$[0,2^n)$中选一个整数$x$,接着把$x$依次异或$m$个整数$a_1~a_m$.在你选出$x$后,你的对手需要选择恰好一个时刻(刚选完数时.异或一些数后或是最后),将$x$ ...

  2. [CSP-S模拟测试]:f(Trie树+二分答案+meet in middle+two pointers)

    题目传送门(内部题67) 输入格式 第一行,三个整数$n$.$k$.$p$.第二行,$n$个自然数,表示$\{a_i\}$. 输出格式 输出一行,两个自然数,表示$f(res)$.$res$. 样例 ...

  3. hdu 4099 Revenge of Fibonacci Trie树与模拟数位加法

    Revenge of Fibonacci 题意:给定fibonacci数列的前100000项的前n位(n<=40);问你这是fibonacci数列第几项的前缀?如若不在前100000项范围内,输 ...

  4. 【BZOJ4523】[Cqoi2016]路由表 Trie树模拟

    [BZOJ4523][Cqoi2016]路由表 Description 路由表查找是路由器在转发IP报文时的重要环节.通常路由表中的表项由目的地址.掩码.下一跳(Next Hop)地址和其他辅助信息组 ...

  5. 【BZOJ2741】【FOTILE模拟赛】L 分块+可持久化Trie树

    [BZOJ2741][FOTILE模拟赛]L Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max( ...

  6. hdu4886 TIANKENG’s restaurant(Ⅱ) (trie树或者模拟进制)

    TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 130107/65536 K (Ja ...

  7. 字典树基础进阶全掌握(Trie树、01字典树、后缀自动机、AC自动机)

    字典树 概述     字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...

  8. 【CF888G】Xor-MST Trie树(模拟最小生成树)

    [CF888G]Xor-MST 题意:给你一张n个点的完全图,每个点有一个权值ai,i到j的边权使ai^aj,求这张图的最小生成树. n<=200000,ai<2^30 题解:学到了求最小 ...

  9. 2018.10.20 NOIP模拟 巧克力(trie树+dfs序+树状数组)

    传送门 好题啊. 考虑前面的32分,直接维护后缀trietrietrie树就行了. 如果#号不在字符串首? 只需要维护第一个#前面的字符串和最后一个#后面的字符串. 分开用两棵trie树并且维护第一棵 ...

随机推荐

  1. 基于RRCF(robust random cut forest)的时间序列异常检测流程

    摘要:RRCF是亚马逊提出的一个流式异常检测算法,是对孤立森林的改进,可对时序或非时序数据进行异常检测.本文是我从事AIOps研发工作时所做的基于RRCF的时序异常检测方案. 1.      数据格式 ...

  2. 1.HTML入门

    1.1 初识HTML 1.1.1 概述 网络世界已经跟我们息息相关,当我们打开一个网站,首先映入眼帘的就是一个个华丽多彩的网页.这些网页,不仅呈现着基本的内容,还具备优雅的布局和丰富的动态效果,这一切 ...

  3. C#·对于BOM头之完全解决方案

    阅文时长 | 0.46分钟 字数统计 | 798.4字符 主要内容 | 1.引言&背景 2.使用C#写入带有/不带有BOM头的文件? 3.对于读取文件时,避免BOM头造成的异常. 4.声明与参 ...

  4. jQ的显式迭代和隐式迭代

    jQ的显示迭代 隐式迭代 let lis = document.querySelector('li') lis.forEach(function (value, index) { value.styl ...

  5. Mysql数据库-多实例主从复制-主从故障详解

    一.mysql结构 1.实例 1.什么是单实例 一个进程 + 多个线程 + 一个预分配的内存空间 2.多实例 多个进程 + 多个线程 + 多个预分配的内存空间 ](http://shelldon.51 ...

  6. python3 xlutils对Excel追加内容

    在实际应用中我们通常会需要向一个Excel中追加内容,但是在python3中xlwt用起来有点不太方便,下面介绍一下xlutils包的用法,xlutils包依赖于xlrd包,所以需要导入xlrd包,还 ...

  7. STM32的ADC精度提高方法

    1.精度稳定低一点参考电压VREF稳定: 2.通过设置不同的ADC时钟 和 采样周期 来确定出最适合自己系统的参数: 3.测试思路: 在同样SMPx下,设定不同的时钟得到不同采样时间值: 在同样时钟下 ...

  8. Windows上能看朋友圈的微信来了 | 附下载地址

    昨天的时候,电脑端的微信提示更新就顺手更新了一下,更新完成后习惯性的点了下设置,纳尼,居然被灰到了测试版本? 带着好奇,赶快看了下更新了什么内容: 支持浏览朋友圈 "搜一搜"支持搜 ...

  9. nginx 的基础知识(三)

    Nginx命令 nginx -s reopen 重启nginx nginx -s reload  重新加载nginx文件 nginx -s stop  停止nginx服务 nginx -s quit ...

  10. VMware vRealize Network Insight 6.2 发布 - 网络和安全可视化分析

    发现.优化应用安全性和网络连接解决方案并对其进行故障排除 VMware vRealize Network Insight 可帮助您跨混合和多云环境构建经过优化且高度可用的安全网络基础架构.它提供了网络 ...