随笔分类 -  Trie

摘要:分析 考虑trie+2sat 每次将?=0和?=1的分别插入 插入串时将这个点的选择状态和前缀的选择状态连关系边 注意串结束时建一个新点表示当前串 最后跑2sat即可 代码 阅读全文
posted @ 2019-10-14 07:41 水题收割者 阅读(189) 评论(0) 推荐(0)
摘要:分析 我们发现+1操作就是对于一段连续的1找到它前面最近的0 将这一整段每个数都异或1 我们可以在01trie上走将每一个合法点拿出来打上标记 然后最后依次交换所有标记点的左右儿子即可 我们继续考虑带异或的问题 我们发现我们可以存一下之前的总异或值 然后所有操作前把数跟这个数异或一下即可 代码 阅读全文
posted @ 2019-09-06 08:36 水题收割者 阅读(184) 评论(0) 推荐(0)
摘要:分析 我们发现可以把题目转化为:有一个序列a,问它的排列中相邻两个值异或的最大值的最小值 我们发现序列的构成一定是前几位全是一样的 从某一位开始左面全是0右面全是1 所以只要找到一种方案是的交界两个值异或最小即可 把是0的插入01trie,每次拿是1的查询异或最小值 代码 阅读全文
posted @ 2019-08-24 19:05 水题收割者 阅读(297) 评论(0) 推荐(0)
摘要:传送门 分析 01trie树好题! 我们先考虑将序列变为前缀和形式,在从1到n遍历每一个i 对于每一个i,我们把pre[i]插入trie中,在求出pre[i]与之前数的最大异或值 于是我们就可以得到dp[i]表示前i个数中是最大异或值 转移为dp[i]=Max{dp[i-1],q(pre[i])} 阅读全文
posted @ 2018-11-02 18:35 水题收割者 阅读(167) 评论(0) 推荐(0)
摘要:传送门 题目居然复制不了(QAQ) 分析 TrieJSK已经2比较详细了,就不再单独写博客了,此题相较于Trie模板有一点不同,此题要求比较前缀却没有规定前面是后面的前缀还是后面是前面的前缀,所以我们要先将所有串添加到Trie中,然后再全部查询,如果出现一次直接输出“Bug!”然后跳出循环 代码 # 阅读全文
posted @ 2018-05-11 16:40 水题收割者 阅读(249) 评论(0) 推荐(0)