Trie&AC自动机
lemondinosaur
转圈圈 不停转圈圈 然后摔倒
展开
-
#trie#洛谷 4098 JZOJ 3226 ALO
题目分析首先肯定会想到建一棵可持久化01trie,但是关键是次大值,所以考虑从小到大排序,那么每次该数都会有一段选择的区间,那么考虑把它合并给左右,用该值当次大值在trie中找到区间中最大的一个,其实这道题实际操作比理论还要难,至少我是这么认为的代码#include <cstdio>#include <cctype>#include <deque>...原创 2019-10-23 21:34:29 · 127 阅读 · 0 评论 -
#可持久化01trie,树链剖分#洛谷 4592 异或
题目现在有一颗以1为根节点的由nnn个节点组成的树,树上每个节点上都有一个权值viv_ivi。现在有QQQ次操作,操作如下:111 xxx yyy:查询节点xxx的子树中与yyy异或结果的最大值2 xxx yyy zzz:查询路径xxx到yyy上点与zzz异或结果最大值分析这道题有两种操作,所以要分成两个可持久化01trie分别求解,其它其实有点类似最大异或和那道题,然而还要求LC...原创 2019-10-23 19:52:55 · 183 阅读 · 0 评论 -
#trie,堆#洛谷 5283 JZOJ 6106 BZOJ 5495 异或粽子
题目分析首先做异或前缀和,然后可以把此问题转换成求两两xor的前k大,那么每次若当前堆顶为第ttt大,把当前trie中的第t+1t+1t+1大插入堆中,在trie中类似求第kkk大的方法求出答案代码#include <cstdio>#include <cctype>#include <queue>#define rr registerusin...原创 2019-08-24 08:52:12 · 139 阅读 · 0 评论 -
#贪心,trie#JZOJ 4322 Xor
题目在nnn个数中找2个数,使它们的xor值最大分析那么这道题首先贪心得出,找到相反的二进制会使答案最大,那么需要建立一个trie,表示01值,枚举每一个数,每次去找相反的一项,然后异或的结果取最大值,时间复杂度O(54n)O(54n)O(54n),终于发现bitset常数太大了,用bool数组100多ms,一用bitset就快TLE了代码#include <cstdio>...原创 2019-04-28 17:52:15 · 127 阅读 · 0 评论 -
#hash,trie#洛谷 3449 PAL-Palindromes
题目给出nnn个回文串s1,s2,…,sns1,s2,…,sns1, s2, …, sn,求如下二元组(i,j)(i,j)(i, j)的个数si+sjsi+sjsi + sj仍然是回文串。分析若要两个回文串相连后仍是回文串,那回文串sisisi一定是 sj(leni<=lenj)sj(leni<=lenj)sj(lenilen[i]<=len[j]len[i]&l...原创 2018-08-19 20:42:49 · 188 阅读 · 0 评论 -
2018.07.10【2018提高组】模拟C组
前言:今天同时做两个比赛(B组不一定今天能改完),但是C组做完了,最后一题单独放(太难了)题目JZOJ 3792 分队问题JZOJ 3793 数字对JZOJ 3794 高级打字机后续洛谷 2062 分队问题 2090 数字对 1383 高级打字机...原创 2018-07-10 15:02:53 · 248 阅读 · 0 评论 -
#trie,倍增,主席树#JZOJ 3794 高级打字机
题目T x:在文章末尾打下一个小写字母x。(type操作) U x:撤销最后的x次修改操作。(Undo操作)(注意Query操作并不算修改操作) Q x:询问当前文章中第x个字母并输出。(Query操作)文章一开始可以视为空串。分析可持久化数据结构特别多,在此不多说,这种方法是Trie+倍增,bel表示版本,dep表示距离第一个版本的深度,fa[i][j]fa[i][j]f...原创 2018-07-10 18:49:31 · 250 阅读 · 0 评论 -
#trie#洛谷 2580 于是他错误的点名开始了
题目trie模板题,询问存不存在,有没有重复询问分析因为容易理解,贴伪代码void pusht(char *s){ int len=strlen(s),p=1; for (register int k=0;k<len;k++){ int c=s[k]-97; if (!trie[p][c]) trie[p][c]=++t...原创 2018-08-17 20:40:48 · 152 阅读 · 0 评论 -
#trie#loj 10050 The XOR Largest Pair
题目在n个数中找出两个数x,yx,yx,y,使xxx xor yyy最大。分析可以用trie存下每个数的二进制信息,每次查找时尽量往二进制不同的边上走,得到的数与原数的异或值就是答案代码#include <cstdio>#include <bitset>int trie[3100001][2],tot,ans,a[100001],n;...原创 2018-08-17 22:19:03 · 208 阅读 · 0 评论 -
#trie#loj 10056 poj 3764 The XOR Largest Path
题目在n个数中找两个数x,yx,yx,y,使x到y的路径异或和最大分析可以用一种类似于差分的东西,用一个深搜求出点到根节点的异或值,然后就像The XOR Largest Pair就好了代码#include &lt;cstdio&gt;#include &lt;bitset&gt;#include &lt;cstring&gt;s原创 2018-08-18 10:03:15 · 156 阅读 · 0 评论 -
#trie#洛谷 2922 秘密消息 Secret Message
题目有几个字符串,现给出一些字符串SSS问SSS是否为字符串的前缀或字符串是SSS的前缀分析可以用end标记末尾,用sum表示有多少字符串经过该点 然后建trie就好了代码#include <cstdio>int n,m,k,tot,trie[500001][2],end[500001],sum[500001];int in(){ int ...原创 2018-08-18 10:25:27 · 141 阅读 · 0 评论