一道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. Redis数据结构—整数集合与压缩列表

    目录 Redis数据结构-整数集合与压缩列表 整数集合的实现 整数集合的升级 整数集合不支持降级 压缩列表的构成 压缩列表节点的构成 小结 Redis数据结构-整数集合与压缩列表 大家好,我是白泽.今 ...

  2. Java_常用类API之一

    Math类 Math类中包含一些对数据进行数学运算的方法,而该类中的方法全都是静态的.像这样的类称之为工具类. 1 public static int abs(int a) 2 对一个数据求绝对值 3 ...

  3. I/O流以及文件的基本操作

    文件操作: 文件操作其实就是一个FIle类:我们学习文件操作就是学习File类中的方法: 文件基操: 第一部分:学习文件的基本操作(先扒源码以及文档) Constructor Description ...

  4. Jmeter(一) - 从入门到精通 - 环境搭建(详解教程)

    1.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态和动态资源的性能,例如:静态文件, ...

  5. Spring 实现策略模式--自定义注解方式解耦if...else

    策略模式 定义 定义一簇算法类,将每个算法分别封装起来,让他们可以互相替换,策略模式可以使算法的变化独立于使用它们的客户端 场景 使用策略模式,可以避免冗长的if-else 或 switch分支判断 ...

  6. [bug] IDEA springboot项目 访问静态资源 html页面 报404

    原因 复制的静态资源目录没有编译 解决 检查target目录中,是否有static目录,若没有,重新右键项目install即可 若还不能解决,尝试浏览器缓存和IDEA编译设置,详见参考链接 参考 ht ...

  7. 强哥HTML学习笔记

    html 浏览器的选择:1.火狐2.ie3.chrome4.mac5.opera 安装两款插件:1.firebug2.web develope html页面元素:1.doctype2.htmlhead ...

  8. VMware(Caps Lock键)切换大小写作用失效的Bug的解决办法

    前言 第一种情况是:进入VMware虚拟机的时候,即使按了Capslock键开启大写,灯虽然亮了,但是,打出来的字母还是小写,没有有任何的效果,根本不能转换成大写. 只有按Shift+字母才能输入大写 ...

  9. 优秀电路资料--- IOT方案

    完整的IOT方案 http://www.cirmall.com/circuit/4117/%E3%80%90%E5%BC%80%E6%BA%90%E3%80%91%E5%AE%8C%E6%95%B4% ...

  10. Step By Step(Lua面向对象)

    Step By Step(Lua面向对象) Lua中的table就是一种对象,但是如果直接使用仍然会存在大量的问题,见如下代码: 1 Account = {balance = 0}2 function ...