自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 POJ 1442 Black Box(Treap模板题)

题目链接:http://poj.org/problem?id=1442 题目大意: 就讲一下第二行数列到底是什么玩意儿吧,第二行的意思是插入第几个数的时候进行一次询问,第一次询问排第一,第二次询问排第二的... 解题思路: Treap模板题,所以我另写了一篇博客把这题需要的部分讲了一下:对,对,就是这里 代码: #include<cstdio> #include<c...

2019-08-30 20:17:52 215

原创 Treap模板

Treap = 二叉搜索树 + 堆 一、二叉搜索树 简称BST,每个节点最多有两个子节点,左子比当前节点小,右子比当前节点大。 因此对于插入和查找第k小的值,都可以从根递归着进行下去,在到达递归终点之前,不是选择这个节点左儿子就是右儿子,因此,操作的复杂度 = 树的深度。 然而,树会根据插入的数的不同,产生不同的形状,并不是我们认为的logN,最好情况下才是O(logN),要达到O(lo...

2019-08-30 20:09:39 346

原创 SPOJ - SUBLEX Lexicographical Substring Search(后缀自动机)

题目传送门 解题思路: 多组输入会RE(坑爹玩意儿) 后缀自动机上可以跑子串,因此每一位我们都按照a~z的取,这样可以使字典序尽量小。 怎样才能找到第k小的呢? DFS预处理每个节点包括自己共可形成多少子串,记为cnt[]。注意记忆化,不然GG(复杂度大概从O(26^2N)->O(2N)) 然后逼近即可,我们保证k小于等于当前子树大小,找到当前根的26个子节点中,第一个使得前po...

2019-08-25 19:49:10 93

原创 SPOJ - NSUBSTR Substrings(后缀自动机)

题目传送门 解题思路: 题意是求一个串各个长度的子串的可重叠最大重复出现次数。 ①首先我们肯定能想到构造后缀自动机的时候每加入一个新的字符新产生的子串长度一定是跟当前节点有关。用cnt[]记录每个节点的串出现的次数,在一个个添加字符的时候,每次在这个新产生的后缀节点+1,我们知道如果这个节点没有对应符合要求的父节点的话还会再产生一个新的节点,那个节点不用记,因为那个节点也属于当前节点的后缀,...

2019-08-24 19:10:28 175

原创 SPOJ-LCS2 Longest Common Substring II (后缀自动机)

题目链接:https://www.spoj.com/problems/LCS2/en/ 解题思路: 对于两个串的LCS,我们只需对其中一个建sam,另一个在上面跑,记录最大值即可。 对于多个串的话,我们需要记录每个串跑sam的时候在每个节点的相同子串取最大值,每次跑完更新一下每个节点当前所有串的最长相同子串取最小值。 需要注意的是失配时跳fa数组的时候也需要更新fa节点的数据。 代码: ...

2019-08-23 12:20:08 129

原创 SPOJ LCS:LCS - Longest Common Substring(后缀自动机)

题目链接:https://www.spoj.com/problems/LCS/en/ 解题思路: 数据量和时间限制摆明了准备卡掉O(N*logN)的求法,后缀自动机可以O(N)解决 讲解后缀自动机的博客(易懂):https://www.luogu.org/blog/Kesdiael3/hou-zhui-zi-dong-ji-yang-xie 讲解后缀自动机的PPT(高深):https://...

2019-08-21 14:12:23 140

原创 HDU 3247 Resource Archiver(AC自动机+BFS+状压DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3247 参考博客:https://www.cnblogs.com/kuangbin/p/3164106.html 不能处理的数据: 2 1 11 00 1100 也不知道这种病毒串是否合法,我觉得应该不会出现这种病毒串,不然压缩原本字符串的过程中间还得添几个其他的字符也算不上是压缩了。 各...

2019-08-18 13:22:44 178

原创 HDU 5418 Victor and World(Floyd + 状压DP解决TSP问题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5418 解题思路: 有n座城市,m条边,询问从1节点开始走遍所有节点回来的最短路径。 因为n比较小,因此可以用状压DP做 例如,我们用一个数i表示一种状态,若i转化为二进制为10111,表示去过1,2,3,5,没去过其他城市 先用Floyd求出任意两点最短路,记做mp[][],mp[i][j]...

2019-08-17 12:14:34 260

原创 图论的一些基础算法的模板

Floyd 算法: 作用:求任意两点最短路 时间:O(V^3) #define for0(i,a,b) for (int i=a;i<b;i++) memset(dp,INF,sizeof dp); for0(i,0,n) dp[i][i] = 0; int u,v,w; for0(i,0,m){ scanf("%d %d %d",&u,&v,&w);...

2019-08-15 16:47:05 110

原创 POJ 3259 Wormholes(Floyd/Bellman_ford/SPFA 判负环)

题目链接:http://poj.org/problem?id=3259 解题思路:只要图中存在某个圈,沿着这个圈走一圈之后时间能够回退(即负环),那么一定可以完成题目所说之事。 早期floyd做法 做法判断是否有节点到自身的最短路小于0 1829ms ///*** Floyed 法求任意两点最短路 #include<iostream> #include<algorit...

2019-08-15 16:35:46 144

原创 ZOJ 3228 Searching the String(AC自动机)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3228 解题思路: 给出一个长串,询问很多个模式串在这个长串中可重叠最大重复次数以及不可重叠最大重复次数。 首先KMP虽然处理可重叠和不可重叠很方便(不可重叠的情况完全匹配后j指针归0即可),但是无奈长串太长,模式串太多,所以肯定会T成狗 那么还是用AC自动...

2019-08-13 20:47:18 137

原创 HDU 2457 DNA repair(AC自动机+DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2457 解题思路: 给出n个病毒串,一个基因串,询问基因串中最少修改多少个字符可以获得不包含任何一个病毒的串。 AC自动机用于 判断当前节点枚举子节点时候后缀是否会形成病毒串 DP的思路: 定义:dp[i][j]表示长度为i,终点在j节点的最小修改次数 初始化:dp[0][0] =...

2019-08-13 20:28:14 89

原创 HDU 2296 Ring (AC自动机+DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2296 解题思路: 给出n个串和串的价值,询问长度为L的串最多能拥有的价值,并输出价值最大的串中长度最小中字典序最小的串。 AC自动机的作用是跑到最长相同后缀对应的单词前缀处使得最快到达下一个单词 DP: 定义: dp[i][j]表示长度为i,且第i个字母对应AC自动机节...

2019-08-13 09:46:36 124

原创 HDU 2825 Wireless Password(AC自动机+状压DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2825 解题思路: 给出n个串,询问至少包含其中k个串的长度为L的串的种类 AC自动机的作用就是为了枚举当前节点的所有自节点时找到最优的位置使得尽快到达单词结尾,以及到达某一节点时获得自己以及所有后缀链接的所有到达的单词末尾的所有情况(构造时直接处理) 状压DP: 用k表示状态。 eg. k...

2019-08-12 20:38:44 126

原创 写BUG三分钟,涤BUG三小时

比较笼统的问题: 1 写完函数/板子,根本没有构造需要的数组结果在下面天花乱坠的使用:常见AC自动机不构造,后缀数组不够早,回文树不构造,欧拉筛不构造,这个错误 2 多组输入没有初始化 3 修改代码的时候只修改部分少修改了一些东西,证明代码整体关联性不够强,这个错误非常致命,一般都是最后对这别人的代码才能发现,需要把这个错误深深印到潜意识里啊、、、 4 每个地方手打取模的数,数字很...

2019-08-11 22:15:34 203

原创 POJ 1625 Censored!(AC自动机+高精度+DP(因为矩阵会T))

题目链接:http://poj.org/problem?id=1625 RE:爆char WA:还是爆char 解题思路: 思路和POJ2778是一样的:https://blog.csdn.net/weixin_43768644/article/details/99050540 但是这题矩阵快速幂会T 设字符种类为M,串长度为L,病毒串总节点数N 矩阵快速幂复杂度O(N^3*logL...

2019-08-11 21:57:02 105

原创 HDU 2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2243 WA: 1.单词的总数 = 26+26^2+26^3+......+26^L,而不是26^L 2.使用等比数列求和公式求单词总数:(26^(L+1)-26)/25,出现除法取模导致错误,这个25在模(2^64)下逆元我不会求. 做这题肯定做过POJ2778了吧 POJ 2778利用矩阵...

2019-08-11 14:45:52 107

原创 POJ 2778 DNA Sequence(AC自动机+矩阵快速幂)

题目链接:http://poj.org/problem?id=2778 TLE: 1.计算矩阵大小请根据具体具体节点数,直接按最大矩阵算会超时 2.取模操作在每一行完成之后再做 解题思路: 我们首先要知道矩阵快速幂可以应用于这样一个场景: 询问一个有n个节点的图,从节点x走k步到节点y有多少种方法? 构造n*n的矩阵,把所有的边都加到矩阵,比如(i,j)有两条边,a[i][j] =2...

2019-08-10 09:56:27 121

原创 ZOJ 3430 Detect the Virus(AC自动机,你WA疯了就进来瞧瞧.)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3430 WA: 1.每个串只记一次,不要记多次 2.忽略等号不转码直接跑AC自动机会错,例子: 转码前: 1 aGVs 1 aGhlbA== ans = 0 -------------- 转码后: 1 hel 1 hhel ans = 1 3.ch...

2019-08-08 14:21:25 99

原创 BZOJ 2301 [HAOI2011]Problem b(莫比乌斯反演)

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2301 咱也不知道莫比乌斯函数,莫比乌斯反演怎么来的,直接用就得了... ①莫比乌斯函数: else表示质因子分解后有质因子出现一次以上 莫比乌斯函数跟着欧拉筛跑一遍就可以求出来 ②莫比乌斯反演的两种写法: 其中f(i)是题目询问的东西,你发现直接求求...

2019-08-07 14:23:30 180

原创 AC自动机

参考博客:https://www.cnblogs.com/sclbgw7/p/9260756.html 目录 一、例题 二、联系KMP思考AC自动机的构建 三、AC自动机匹配时跳fail边的优化 四、AC自动机对于单词节点计数时跳fail边的优化 一、例题 给出n个模式串,一个匹配串,询问有几个模式串出现在匹配串中 二、联系KMP思考AC自动机的构建 对于上面的问题我们如何用KM...

2019-08-06 19:00:32 131

原创 字符串算法的一些总结

已学习 最小表示法 功能: 1.O(N)求一个串的所有循环同构串中字典序 最小/最大 的那个串的起点在原串中的位置 KMP 功能: 1.O(N)求每个前缀的最长相同前后缀 2.O(N+M)进行模式串在匹配串中的查找 3.O(N)判断当前字符串是否循环,若循环则len%(len-fail[len]) = 0 4.O(N)求当前字符串的最小循环节len-fail[len]不管当前是否...

2019-08-05 23:18:05 202

原创 URAL 2040 Palindromes and Super Abilities 2(回文树)

题目链接:http://acm.timus.ru/problem.aspx?space=1&num=2040 解题思路: 卡空间,把板子里的s数组改成char或者unsighed short 卡时间,用快读,输出用putchar 好抠的题。 代码: #include<cstdio> #include<algorithm> #include<cst...

2019-08-05 15:23:10 133

原创 HDU 4426 Palindromic Substring(回文树+哈希)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4426 WA: 1.k有没有 long long 2.回文串是取前一半 解题思路: 利用回文树获取本质不同的回文串的数量以及他们回文串前一半第一次出现的位置(起点终点位置)。 我们搞一个结构体:记录上面的信息,同时还需要一个变量计算hash值 对于每一次询问,我们O(N)预处理整个串的ha...

2019-08-04 16:54:58 118

原创 2019牛客多校第六场 C Palindrome Mouse (回文树)

题目链接:https://ac.nowcoder.com/acm/contest/886/C 解题思路: 想到类似dp的思路,用cnt[fa]记录父节点不包括自身的回文子串总数,那么 当前的总数可以分为3部分 cnt[now] = cnt[fa] + 1(父节点本身) + 当前在父节点串两边新添加的的字母后现在的串能够产生的新的回文串 前两部分没有什么问题,注意cnt[0] 和 cn...

2019-08-04 14:11:08 115

原创 UVALive 7041 The Problem to Slow Down You(回文树)

题目链接:https://vjudge.net/problem/UVALive-7041 WA:相乘爆long long RE:新加入特殊间隔符的特殊间隔符号越界了 解题思路: 让两个字符串共用同一棵回文树,加完第一个串之后在两者之间加一个不会出现的字符,防止产生两个字符串之间的回文串。 然后就跟原本只有一个串时cnt的统计差不多,现在分成两部分,第一个字符串的字符计入cntl,第二个计...

2019-08-03 19:40:01 92

原创 回文树功能

len[]:当前节点代表的回文串长度 num[]:当前节点代表的回文后缀种类+1(自己) cnt[]:当前节点代表的回文串的数目 p:当前节点总数 ①统计一个字符串本质不同回文串种类,统计每种回文串的数目(难度:*) p-2,cnt[] 直接使用即可(cnt要先跑一遍回文树里的count函数,不然没有计入某些回文后缀包含当前节点回文串的数目) ②统计每个前缀的最长回文后缀(难度:*)...

2019-08-03 16:40:40 114

原创 HDU 5421 Victor and String(回文树前段插入)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5421 这题就是学一下回文树前段插入。 下面这个是论文原话。 因此对于我们最初的板子,我们有: 改动1:原本维护上一个节点所在的回文串的节点的指针---->两个指针(重点) 由于回文串最长回文前缀和后缀是一样的,所以实际上我们只需要在左右插入的时候维护两个不同的指针,左边插入的指针维...

2019-08-03 10:16:03 139

原创 HDU 5157 Harry and magic string(Manacher+差分)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5157 解题思路: 一个pre[],一个suf[],分别表示1~i,i~len的回文串数量(此时字符串下标从1开始) 跑一遍马拉车,枚举每个位置的最长串,设mid为回文中心 [1,mid] 位置的后缀和需要增加的数量依次是 mid-l+1,......mid-l+1,.......,2,1 [...

2019-08-02 15:36:51 184

原创 HYSBZ 2160 拉拉队排练(回文树)

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2160 解题思路: 回文树统计本质不同回文串长度,数目,降序排序后遍历。 快速幂加快乘积运算,然后碰到长度1就不用乘了。 注意本题只要奇数长度回文串。 代码: #include<cstdio> #include<algorithm> #include&...

2019-08-02 14:55:40 81

原创 HYSBZ 2565 最长双回文串(回文树)

题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2565 容易WA的数据: Input abccba Output 5 解题思路: 利用回文树在插入字符的时候可以得知当前插入字符的最长回文后缀,我们用一个数组记录这个当前字符做结尾的后缀,正着跑一遍得到最长后缀,反着跑一遍相当于得到最长前缀,然后相邻前后缀相加的最大值就是...

2019-08-02 09:26:03 120

原创 HDU 5394 Trie in Tina Town(用回文树找字典树中回文串总数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5394 大家最喜欢看到的东西: WA:试试这组数据 Input 5 a 0 b 1 b 2 a 3 a 2 Output 14 RE(爆栈):看题目下面提示,手动加栈后记得用C++提交 RE(越界):看看有没有把根节点(没有字符)加入回文树 解题思路: 塞进回文树的每次都是一条从...

2019-08-01 16:27:24 153

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除