[Strings]一些字符串题目

Trie

BZOJ 3689 异或之

大意:
给定 n 个数,求这 n 个数两两异或的值中的前 k
解:
将加法换成异或就变成了一个用堆合并多个有序表的经典问题,对于加法我们按大小排序就能得到有序表,而由于这里是异或,我们需要高效地维护有序表,即对于一个数 ai 快速求出与它异或第 k 小的数。
我们将所有数按二进制建成 Trie ,然后在 Trie 的结点上记录下子树中的结束结点个数,再在 Trie 树上走一遍就得到了答案

BZOJ 3439 Kpm的MC密码

大意:
给定 n 个字符串,对于每个字符串求以这个字符串为后缀的字符串中第 k 小的编号
解:
反转建出字典树,相当于询问这个点的子树里结束结点编号的第 k 大,子树查询利用 dfs 转区间第 k 大,主席树即可

BZOJ 3217 ALOEXT

大意:
维护一个序列,支持以下操作:
1. 在某个位置插入一个数
2. 删除某个位置上的数
3. 修改某个位置上的数
4. 求某段区间中的次大值与区间中另一个数的异或值的最大值
解:
假如是询问整个序列,我们可以用字典树来做,由于每次询问区间不一样,我们用平衡树套字典树维护区间信息,这里用替罪羊来套字典树

AC 自动机/ KMP

BZOJ 3670 NOI2014 动物园

大意:
给一个字符串 S|S|<=106 ,求所有前缀 Si numi 之积, numi SiS使S

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值