[CTSC2010]珠宝商 SAM+后缀树+点分治】的更多相关文章

[CTSC2010]珠宝商 不错的题目 看似无法做,n<=5e4,8s,根号算法? 暴力一: n^2,+SAM上找匹配点的right集合sz,失配了直接退出 暴力二: O(m) 统计过lca=x的路径, 没法直接合并,就间接合并! 把所有形如(z,x)(x,y)的路径在原串所有出现位置打上标记 原串每个点维护结束路径(zi,x)和开始路径(x,yi)个数(实际上只有char=a[x]的位置才有值),然后乘起来就是贡献 打标记: SAM匹配 麻烦事是:这个是往某个字符串前面加字符,但是要在字符串末…
传送门 这题思路太清奇了……->题解 //minamoto #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define ll long long using namespace std; inline int read(){ #define num ch-'0' ;int res; while(!isdig…
之前我们给的SAM的例题,基本上是一个串建SAM的就能做的 如果要建多个串的SAM应该怎么做呢 首先看题,bzoj2780 我一开始的想法是SA以前的弄法,把串拼起来,中间加分隔符做SAM 这题确实可以这么做,这样根据SAM能识别所有子串的性质 而且每个节点都代表了唯一的一个串 每个询问串我们都能找到最终转移到哪(找不到就是没出现过) 问在多少个串出现过这就等价于在ST(s)的parent树的子树中,出现了多少种不同的权值 这显然可以维护dfs序,用经典的离线做法来搞(更好的写法见文末UPD)…
题目链接:http://uoj.ac/problem/131 题意:给出一个字符串,第i个字符对应的值为a[i], 对于i∈[0,n),求最长公共前缀大于等于i的字串对个数,并求这些字符串对开头对应值相乘最大值.n=3*10^5 题解: 学了个厉害的东西啊... 正解好像是sa+并查集(合并height) 然而我学了个用sam的做法.. 对于第一问: 首先我们要知道,建立后缀自动机之后,parent树就是逆序串的后缀树. why?看这个博客好了:http://z55250825.blog.163…
珠宝商 题目描述 Louis.PS 是一名精明的珠宝商,他出售的项链构造独特,很大程度上是因为他的制作方法与众不同.每次 Louis.PS 到达某个国家后,他会选择一条路径去遍历该国的城市.在到达一个城市后,他会使用在这个城市流行的材料制作一颗珠子,并按照城市被访问的顺序将珠子串联做成项链,为了使制作出来的项链不会因为城市之间的竞争而影响销量,路径中同一个城市不会重复出现(因为如果项链中 $A$ 城市的材料比 $B$ 城市的材料使用的多,则项链在 $B$ 城市的宣传可能会受到影响).经过多年对消…
后缀自动机 后缀自动机是一种确定性有限状态自动机, 它可以接收字符串\(s\)的所有后缀. 构造, 性质 翻译自毛子俄罗斯神仙的博客, 讲的很好 后缀自动机详解 - DZYO的博客 - CSDN博客 下面是一些note: 定义 对于字符串\(s\)的子串\(t\), \(endpos(t)\) (或者 \(right(t)\) ) 表示t在s中出现位置的右端点的集合. \(endpos\)互不相交. 有相同 \(endpos\) 集合的字符串构成一个等价类. 对于每个等价类, 包含的字符串长度为…
P4218 [CTSC2010]珠宝商 神题... 可以想到点分治,细节不写了... (学了个新姿势,sam可以在前面加字符 但是一次点分治只能做到\(O(m)\),考虑\(\sqrt n\)点分治,如果子树大小\(>\sqrt n\)就用\(O(m)\)的点分治做法,否则用蛤希暴力. 然而块大小设为\(20,30\)比\(\sqrt n\)快多了... #include<bits/stdc++.h> #define il inline #define vd void #define f…
本篇口胡写给我自己这样的东西都忘光的残废选手 以及那些刚学SAM,看了其他的一些东西并且没有完全懵逼的人 (初学者还是先去看有图的教程吧,虽然我的口胡没那么好懂,但是我觉得一些细节还是讲清楚了的) 大概是重复一些有用的想法和性质,用以加深印象吧-如果可以的话希望也能理解得更透彻一点- 1.如何设计出一个后缀自动机? 现在用的SAM并不是本来就在那里的,要比较深入地理解,就不能只从验证它对不对的角度考虑,而要考虑为什么它是这个样子. 要一个能够接受后缀的有限状态机,并不用像现在的SAM那样弄,比如…
Description 给你一个字符串,如果一个串包含两个可有交集的相同子串,那么这个串的价值就是子串的价值+1.问你给定字符串的最大价值子串的价值. Input 第一行读入字符串长度$n$,第二行是字符串. Output 一行答案. Sample Input1 3abc Sample Output1 1 Sample Input2 5ddddd Sample Output2 5 Sample Input3 11abracadabra Sample Output3 3 Solution 首先把后…
仰望半月的夜空 题解 可以的话,支持一下原作吧... 这道题数据很弱..... 因此各种乱搞估计都是能过的.... 算法一 暴力长度然后判断判断,复杂度\(O(n^3)\) 期望得分15分 算法二 通过二分+\(hash\)或者等等来优化字典序比较,复杂度\(O(n^2 \log n)\),可能要松一下 期望得分30分 ps:好吧有55分... 算法三 我们考虑字符集非常小的情况 我们猜想出题人很难卡掉玄学做法,因此我们就想一个玄学做法 我们考虑用\(SAM\)来处理这个问题 建出\(SAM\)…