
bzoj3439: Kpm的MC密码(四种做法)
发布日期:2021-05-06 23:47:59
浏览次数:10
分类:技术文章
本文共 1640 字,大约阅读时间需要 5 分钟。
感想
一开始看错题了。。
然后这题呢,不小心又弄了四个方法,然而我的方法还是最挫的QAQ 挑你们自己喜欢的吧题解
注意,下文全部的字典树都是倒着建的
1可持久化tri 我的O(nlogn)
你就建一个可持久化tri,然后你就二分一下答案,在1~i这颗字典树上走到这个字符串对应的节点。。
然后看一下出现过多少次就好了,挺简单的#include#include #include #include using namespace std;const int N=300005*2;struct qq{ int son[26]; int c;//在多少个串中出现过 }s[N];int num=0;int L[N],R[N],cnt;char s1[N];int n;char ss[N];int root[N];//前i个串void Ins (int &rt1,int x,int rt2){ if (x==-1) return ; if (rt1==0) rt1=++num; s[rt1].c=s[rt2].c+1; int c=ss[x]-'a'; Ins(s[rt1].son[c],x-1,s[rt2].son[c]); for (int u=0;u<26;u++) if (u!=c) s[rt1].son[u]=s[rt2].son[u];}int k;int check (int now,int x)//前多少个字符串 第几个字符串去匹配{ now=root[now]; for (int u=R[x];u>=L[x];u--) { int c=s1[u]-'a'; now=s[now].son[c]; } return s[now].c;}int main(){ s[0].c=0; scanf("%d",&n); for (int u=1;u<=n;u++) { scanf("%s",ss+1);int len=strlen(ss+1); Ins(root[u],len,root[u-1]); L[u]=cnt+1; for (int i=1;i<=len;i++) s1[++cnt]=ss[i]; R[u]=cnt; } for (int u=1;u<=n;u++) { scanf("%d",&k); int ans=-1; int l=1,r=n; while (l<=r) { int mid=(l+r)>>1; if (check(mid,u)>=k) {ans=mid;r=mid-1;} else l=mid+1; } printf("%d\n",ans); } return 0;}
2 乱七八糟的方法O(nlogn)【但是不可以有重复的串】
我们可以吧串从小到大插入,可以知道一个串的Kpm串肯定是在他后面的
于是在后面插的时候如果这个节点之前是别人的终点,你就在别人那里加上自己 最后每个点都可以获得一个集合,拍个序就好了3 比较优的做法O(n)
大概就是把2的方法,按时间顺序插入,然后我们将他路过的点都加上他自己的信息。。
然后以后某个串的终点的kmp串就是他的终点节点所拥有的信息4网上烂大街的做法O(nlogn)
就是dfs序+主席树,我也没有认真看,不写了
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月04日 09时40分44秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
谷歌浏览器 禁用JavaScript
2019-03-04
gitee 修改个人域名 个人空间地址 URL
2019-03-04
C++11中bind的使用错误
2019-03-04
Android中CMake的使用之一初步总结
2019-03-04
一起学智能合约之四表达式和控制结构
2019-03-04
futex同步机制分析之三内核实现
2019-03-04
多线程的伪共享
2019-03-04
flink分析使用之五工作图的生成和分发
2019-03-04
基于OpenCV的路面质量检测
2019-03-04
Spring Cloud系列_11 Feign负载均衡、请求传参
2019-03-04
leetcode 543. Diameter of Binary Tree
2019-03-04
VSLAM系列原创01讲 | 深入理解ORB关键点提取:原理+代码
2019-03-04
卡尔曼滤波器的特殊案例
2019-03-04
基于Opencv的图像单应性转换实战
2019-03-04
【C++简明教程】Python和C++指定元素排序比较
2019-03-04
视觉实战|使用人工神经网络进行图像分类
2019-03-04
3D感知技术及实践
2019-03-04
北大读博手记:怎样完成自己的博士生涯?非常具有指导性!
2019-03-04
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
2019-03-04
使用PyTorch时,最常见的4个错误
2019-03-04