WangMeow --- ᶘ ᵒᴥᵒᶅ ฅ^•ﻌ•^ฅ

欲穷算法千里目,更上编程一层楼!

【ACM-ICPC 2018 焦作赛区网络预赛】H. String and Times ---- 后缀自动机

题目传送门 做法: 计算出每个状态下的endpos,通过endpos在区间内统计maxlen[st] - minlen[st]+1 即 maxlen[st] - minlen[st]+1 = l[st] - l[slink[st]]; 模板题 AC代码: #include&lt...

2018-10-19 12:24:40

阅读数:13

评论数:0

[Hihocoder](1449)后缀自动机三·重复旋律6 ---- 不同长度下出现次数最多的子串(SAM)

题目传送门 做法: 原题中小Hi 的讲解循序渐进,比我好,好好吸收他的讲解即可。 不过这里要说一个自己异议的地方,就是自己认为这一步没有必要。但是网上包括题目本身都加了这句话,我没加我也AC了。所以对此持疑惑态度。 因为我们知道ans[i] 一定>= a...

2018-10-19 11:39:26

阅读数:8

评论数:0

[HDU](4622)Reincarnation ---- 后缀自动机or后缀数组(区间内不同子串的个数)

题目链接 做法: SA做法: 复杂度O(t * q * (n*log(n))) 暴力解法,注:(q>n) 7e8 险过…… 对于每次查询,把这段区间内的字符串,建立后缀数组,然后用(n-1)-sa[i]-height[i]计算。 SAM做法: 复杂度O(n^2+q) 4e...

2018-10-18 16:42:42

阅读数:5

评论数:0

[洛谷] (P3804)【模板】后缀自动机 ---- SAM(模板题)

题目传送门 做法: 考察SAM的基本概念,即各个状态的endpos集合的大小怎么求? 我们从parent树上自底向上跑,类似树的遍历(即回溯过程),去统计集合的大小即可。 AC代码: #include<bits/stdc++.h> #define I...

2018-10-18 12:44:25

阅读数:3

评论数:0

[Hihocoder](1445)后缀自动机二·重复旋律5 ---- SAM构造

题目传送门 做法: 我们知道SAM中 l[st] 数组的意义是状态st的最长子串的长度 从前一状态到当前状态的转移所增加的子串数量: l[st] - l[slink[st]] AC代码: #include<bits/stdc++.h>...

2018-10-17 21:06:02

阅读数:10

评论数:0

【后缀自动机学习笔记】

前言 历经两天,看了大大小小的后缀自动机的知识讲解,看来看去,还是觉得HihoCoder上的SAM系列讲解的最白话最让人容易理解。 HihoCoder 讲解是按照 问题提出—>引入SAM概念---->模拟SAM---->构造SA...

2018-10-17 20:55:12

阅读数:7

评论数:0

[Hihocoder](1441)后缀自动机一·基本概念 ---- 模拟

题目传送门 做法: 原文中对SAM概念的讲解很详细了,值得入门的时候先学习这个~ 模拟即可 AC代码: #include<bits/stdc++.h> #define IO ios_base::sync_with_std...

2018-10-16 20:49:27

阅读数:7

评论数:0

[HDU](6153)A Secret ---- 扩展KMP

题目传送门 题意: 给你两个串s1,s2,让你求s2的所有后缀在s1中出现的频率乘以后缀长度的和。 做法: 逆向思维,我们发现如果将s1,s2翻转,s2原来的所有后缀就变成了前缀。 我们知道扩展KMP中extend[i]的含义是文本串后缀i与模式串的最长公共前缀的长度 如果我们对s1,s2使用扩展...

2018-10-15 21:51:59

阅读数:2

评论数:0

[HDU](2594)Simpsons’ Hidden Talents ---- 扩展KMP

题目传送门 做法: 扩展KMP模板题 扩展KMP: 用来求文本串所有后缀与模式串的LCP 详细教程:扩展KMP算法 AC代码: #include<bits/stdc++.h> #define IO ios_base::s...

2018-10-15 19:22:05

阅读数:4

评论数:0

[Hihocoder](1419)后缀数组四·重复旋律4 ---- 后缀数组(最长连续重复子串)★

题目传送门 做法: 原题给的提示已经讲解的非常详细,这里说一下自己对下面式子的理解 lcp( p - ( l - lcp (p,p+l) % l ) , p-l + lcp (p,p+l) % l +l) lcp(p,p+l)/l +1 是连续重复子串的个数 lcp(p,p+l)%l ...

2018-10-15 14:18:51

阅读数:3

评论数:0

[POJ](2406)Power Strings ---- KMP(连续重复子串)

题目传送门 做法: KMP利用最小循环节周期 那么 周期个数 = len/ len - nex[len] 即是答案 看了罗神的论文,试着用后缀数组做一下,TLE,这个题倍增会被卡常,DC3可过,但是时间复杂度远大于KMP。 总结: KMP为最优解 有时候同一个题,从不同的做法切入,即是A不掉,也...

2018-10-13 20:17:21

阅读数:2

评论数:0

[URAL](1297)Palindrome ---- 后缀数组 or Manacher(最长回文子串)

做法: 最长回文子串两种解法: 1. Manacher 复杂度O(n) 2. 后缀数组+RMQ 复杂度O(n*log(n)) AC代码: //Manacher #include <iostream> #include <cs...

2018-10-13 16:09:26

阅读数:1

评论数:0

[SPOJ](694)Distinct Substrings ----后缀数组(不相同子串的个数)

题目传送门 做法: 一个字符串的某一子串一定是某一后缀的前缀 而且有一个很容易发现的性质 排完序后的后缀数组 suffix(sa[i]),suffix(sa[i+1]),suffix(sa[i+2]),…… ,suffix(sa[n]) 相邻两后缀之间增加的子串数量为 (n -1)- sa[i]...

2018-10-12 22:14:31

阅读数:8

评论数:0

[Hihocoder](1415)后缀数组三·重复旋律3 ---- 后缀数组(最长公共子串)

题目传送门 做法: 我们知道,字符串中任意一个子串都是某个后缀的前缀 我们也知道了Height数组的含义是排名为i的后缀与排名i-1的后缀的最长公共前缀,即就是最长公共子串。 现在题意让我们找两个串的最长公共子串,普通的KMP是无法解决这样的匹配的问题,因为KMP是完全匹配,而本题可出现子串的匹...

2018-10-11 20:56:18

阅读数:8

评论数:0

[POJ](1743)Musical Theme ---- 后缀数组(最长不可重叠重复子串)

题目传送门 题意: 给你一个长度为n的序列,序列中的元素大小为[1,88]。 现在让你找重复主题:主题指序列中的一个子串,其中满足以下条件 1.长度>=5 2.子串元素间的差值相等。 3.重复出现的同一主题不能有公共部分。 求满足题意的最大主题长度,即就是最长不可重...

2018-10-11 17:22:02

阅读数:3

评论数:0

[Hihocoder](1407)后缀数组二·重复旋律2 ---- 后缀数组(最长不可重叠重复子串)

题目传送门 做法: 最长可重叠重复子串可以利用Height数组轻易解决。 不可重叠其实利用Height数组也是很巧妙地~ 同样基于二分的思路,我们二分这个长度k,找到Height数组>=k的,把它们这些后缀分为一组,再判断后缀最大值与最小值的差值是否&...

2018-10-11 16:07:04

阅读数:2

评论数:0

[Hihocoder](1403)后缀数组一·重复旋律 ---- 后缀数组(最长可重叠重复子串)

做法: height[i]:lcp(sa[i],sa[i−1]),即排名为i的后缀与排名为i−1的后缀的最长公共前缀 裸的问题可重叠重复子串问题,二分height数组的最大值并满足>=k即可 AC代码: #include<bits/stdc++....

2018-10-10 17:34:28

阅读数:30

评论数:0

[Codeforces-Gym] (101667I)Slot Machines ---- KMP求前缀最小循环节★

题目传送门 题意: 给你n个数组成的序列,让你求从k+1位置开始,序列以p个数为周期。最小的k+p是多少。 做法: kmp 算法的一个应用,即最小循环节是i-next[i] (吃了没文化的亏_(:з」∠)_  详细讲解:KMP算法 —— next 数组的应用 --- 前缀中最小循环节,最大重...

2018-10-05 10:02:21

阅读数:13

评论数:0

[BZOJ](4260)Codechef REBXOR ---- 0-1字典树+DP★

题目传送门 做法: 需要用到异或前缀和,即异或前缀和与普通前缀和差不多,它满足sum[l] + sum[l+1] + sum[l+2] +……+sum[r] = sum[r]^sum[l-1] 所以我们想要求前i个数中任意区间的异或最大值要怎么做呢? 我们可以讲异或前缀和插入字典树,每次在...

2018-10-04 10:54:17

阅读数:15

评论数:0

[HDU](5536)Chip Factory ---- 0-1字典树★

题目传送门 Hint: 2015ACM/ICPC亚洲区长春站-重现赛 做法: 0-1字典树模板题,因为题目中要求,i,j,k是不同的,所以当我们选取两个数求和找与这个值异或最大的数时,要先把这俩求和的数从字典树中删掉,求完和,再增加。 AC代码: #include<...

2018-10-03 21:17:19

阅读数:27

评论数:0

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