
--------字符串----------
gigo_64
莫看,莫看,这不是真实的我(七海脸)
溜了溜了
展开
-
【csp-j】20191021【模拟】【搜索】【二分】【AC自动机】
传送门咕了。特殊排序数字交换就行。(我竟然写挂了日)代码不放了,,反正是错的。部落卫队强行dfs哈哈哈哈哈加个最优性剪枝#include<bits/stdc++.h>using namespace std;#define in read()int in{ int cnt=0,f=1;char ch=0; while(!isdigit(ch)){...原创 2019-10-21 17:26:12 · 186 阅读 · 0 评论 -
【TJOI2019】甲苯先生的字符串【矩阵快速幂】
传送门咕咕TJOI D1T1,难度不大,还能下手。任何相邻不能出现,相当于给了十万个限制。然后计数。当我们一筹莫展的时候,我们发现了数据范围。n好大哦。这么大一般就是矩阵快速幂了呀。然后我们想起来字符串的矩阵状态往往是字符到另一个字符的方案数。矩阵相乘相当于在两个字符中间放东西。那我们的初始矩阵就是两个字符之间不放东西。那合法的就是1,不合法就是0。所以n次矩阵表示长度为n...原创 2019-10-16 09:59:01 · 166 阅读 · 0 评论 -
【HAOI2016】找相同字符【后缀自动机】
传送门后缀自动机总结这种需要匹配的问题都是将一个串建成自动机,别的串上去跑。在跑的时候叠加答案,我们发现如果找上了一个结点,那这个结点的所有fail,作为这个子串的后缀,都应该被匹配。所以答案应该从fail链上累加下来。而每个点代表一个串集合。串的个数是maxlen-minlen+1。而minlen=fail的maxlen+1。所以直接减去fail的maxlen就能得到本点代表的字符串...原创 2019-10-16 09:07:28 · 112 阅读 · 0 评论 -
【SPOJ8222】Substrings【后缀自动机】
万能VJudge后缀自动机总结求每种长度的子串最大数量。fail树上加起来即可。注意:初始size只能打在字符结点上,不能打在复制结点上。这违背了size的本意。#include<bits/stdc++.h>using namespace std;#define int long longchar ch[250003];struct node{ in...原创 2019-10-16 08:15:18 · 113 阅读 · 0 评论 -
【SDOI2016】生成魔咒【后缀自动机】
传送门后缀自动机总结后方加点,问本质不同子串数量。每新加一个点,当前点的maxlen减去fail的maxlen就是多出来的子串数量。如此便可以维护。不过字符集太大,可以使用map来装儿子。#include<bits/stdc++.h>using namespace std;#define in read()#define int long longint ...原创 2019-10-16 07:43:00 · 108 阅读 · 0 评论 -
【AHOI2013】差异【后缀自动机】
后缀自动机总结传送门求任意两个后缀长度减去其公共前缀长度。如果把串反过来,就是任意两个前缀长度减去其公共后缀长度。公共后缀直接fail树上lca即可。而字符串前缀只有原串长度len个。根据公式,如果将问题转化为两点路径长度和,那边权赋为子节点长减去fail节点长。这样问题就得以转化。而一条边的贡献就是其两端size的乘积。如此可以计算。#include<...原创 2019-10-15 07:57:21 · 138 阅读 · 0 评论 -
【TJOI2015】弦论【后缀自动机】
后缀自动机总结传送门分两个子问题。如果只算一次,那直接dag上动规就行。如果多算,就在插入的时候打个endsize=1。我是在准备的时候弄得。先fail树上endsize累加起来。注意1的endsize不能要。然后再dag上动规。不用建出这些树,因为长度大的一定在底层,所以从大到小处理即可。记得搜索的时候减去自己这个串的贡献。#include<bits/stdc++...原创 2019-10-14 22:06:59 · 129 阅读 · 0 评论 -
【洛咕3804】后缀自动机模板
后缀自动机总结传送门板子,fail树上dfs// luogu-judger-enable-o2#include<bits/stdc++.h>using namespace std;#define in read()#define int long longint in{ int cnt=0,f=1;char ch=0; while(!isdigit(ch))...原创 2019-10-14 21:13:05 · 110 阅读 · 0 评论 -
后缀自动机【TAT】
题目来源由于之前我懒没写博客以至于花了大量时间来复健。从后缀自动机起点开始,走出来的任何串都是原串后缀。从任何一个节点开始,走出来的串合起来就是所有子串。一个后缀自动机上的结点指其endpos集合相同的一坨字符串。体现在从起点走到该点的所有串集合上。我们假设一个变量maxlen为该集合的最长子串长度。我直接说建造过程,就不管看不看得懂了。首先,新建点u继承上一个点的信息,...原创 2019-10-14 20:29:17 · 196 阅读 · 0 评论 -
csplus 20191012 【点双/差分】【AC+矩阵】【线优+拓扑】
见woj4749到4751。困难的图论只在一个环里的边。第一眼就是点双联通。而且如果一个环内边数大于点数,就肯定不止一个环。所以点数必须等于边数,缩了即可。当然还有更简单的方法:参照之前那个Fairy,这个就只需要打树上差分就行了。#include<bits/stdc++.h>using namespace std;#define in read()in...原创 2019-10-12 14:31:58 · 142 阅读 · 0 评论 -
manacher
博主要暴政!啊不是,要学习马拉车一个for循环的事情。记录当前最远扩展位置和扩展这个位置的位置(??)。mx和id。如果当前i在mx里面,就直接找i与id的对称点,直接得到当前最远扩展长度。然后一个一个扩展。当然,为了消除奇偶性,字符中间插入rilong字符。这样的扩展长度也恰是回文长度-1.为了安全,开头再加一个rilong字符。// luogu-judger-en...原创 2019-10-08 20:25:18 · 85 阅读 · 0 评论 -
【bzoj3682】phorni【后缀平衡树】
看,黑暗bzoj网站!FSY的代码真tm好读,比zxy的好看多了,赏心悦目的一匹。支持前端添加字符,维护所有后缀的排名信息。我们使用后缀平衡树。如果直接二哈的话,复杂度会死掉,所以使用nb的后缀平衡树。后缀平衡树每个节点对应一个后缀。给每个节点一个我们定义的权值来比较相对大小。这个自定义权值实现长得像线段树。每个节点给一个左右权值。该点权值为左右权值的平均数。左...原创 2019-10-06 09:15:25 · 202 阅读 · 2 评论 -
【回文自动机】【hdu5421】Victor and String
叶子最可爱了本题特点:支持前后端插入字符,在线询问回文子串或本质不同回文子串数。我们要维护前后端插入,就要维护两个last。一个pre,一个suf。将回文自动机判断字符相等的s[i-t[last].len-1]==s[i]改为s[i-t[last].len*op-op]==s[i]并在前端插入时将op设为-1即可。注意:初始将l设为1e5,r设为l-1。...原创 2019-07-29 08:36:27 · 207 阅读 · 0 评论 -
KMP详解
从头到尾彻底理解KMP 此文转自神的博客 http://blog.youkuaiyun.com/v_july_v/article/details/7041827#1. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。...转载 2018-12-14 20:50:14 · 157 阅读 · 0 评论