【字符串】
nyist_xiaod
这个作者很懒,什么都没留下…
展开
-
HDU 1088 Write a simple HTML Browser
题目链接:Click here~~继续水字符串处理。PE了好几次,没有考虑 '\t' 的情况。题意:将一段HTML代码格式按要求调整。解题思路:用一个pos记录当前行已经输入了几个字符,然后如果位于行首,单词前不用输空格,否则输空格。还有就是一些小细节处理,比如最后要输出一个换行,其他不再详述,见代码。#include int pos,l;void BR(){原创 2012-05-20 20:15:50 · 776 阅读 · 0 评论 -
AC自动机
#include #include #include #include using namespace std;#define CLR(a,v) memset(a,v,sizeof(a))namespace Trie{ const int N = 1e6 + 5; const int Size = 26; int top; struct Node翻译 2013-09-07 12:52:23 · 768 阅读 · 0 评论 -
KMP算法
无聊,贴个KMP的代码,备忘。若想详细了解,点击 http://www.matrix67.com/blog/archives/115/#include #define MaxL 1000005int next[MaxL];int start,end;void Get_next(char *P){ next[0] = -1; for(int i=1,j=-1;P翻译 2012-06-07 20:21:55 · 1695 阅读 · 0 评论 -
HDU 3336 Count the string(KMP 入门)
题目链接:Click here~~题意:给一个长为 n 的字符串 s,求出 s 的所有前缀能在原串中匹配的总次数。解题思路:直接考虑很难,所以换个角度,考虑在 s 的所有子串中前缀共出现了多少次。令 dp[i] 表示子串 [0,i] 中前缀出现的次数,有 dp[i] = dp[ next[i] ] + 1。Ps.写这道题才发现自己大一时写出的模板原创 2013-10-03 11:06:21 · 858 阅读 · 0 评论 -
HDU 3746 Cyclic Nacklace(KMP 最小循环节)
题目链接:Click here~~题意:给一个字符串 s,问最少在 s 结尾处添加多少字符,使 s 是一个 cyclic connected string。解题思路:原创 2013-10-04 21:06:39 · 867 阅读 · 0 评论 -
HDU 2222 Keywords Search(AC自动机 入门)
题目链接:Click here~~题意:有 n 个 key words ,然后给一个主串,询问主串中最多能匹配出多少种 key words。(每种只统计一次)解题思路:由于括号中的条件,可以将每个节点加一个 vis 标记是否已经访问过此节点。这样可以在循环时候加一个剪枝,如果下个节点已经访问过,不必再访问。#include #include原创 2013-09-24 15:13:14 · 774 阅读 · 0 评论 -
HDU 4119 Isabella's Message(模拟)
题目链接:Click here~~题意:有一个 n*n 的单词表,里面写有字母或者空格。然后给你一个 n*n 的不透明纸板,纸板中有若干洞,把纸板盖到单词表上,你可以从洞里看到一些单词,按照顺序读出来,然后旋转90度,继续,直到转完一圈。最后问将它们连起来是否能组成一句话,使句中单词都在他的字典里。解题思路:初始方向不定,但最多就 4 种情况,可以枚举。之后就是原创 2012-10-14 10:24:13 · 1318 阅读 · 0 评论 -
HDU 2825 Wireless Password(AC自动机 + 状态压缩DP 入门)
题目链接:Click here~~题意:给 m 个单词构成的集合,统计所有长度为 n 的串中,包含至少 k 个单词的方案数。解题思路:令 dp[i][j][mask] 表示长度为 i ,跑到自动机节点 j ,已经包含单词为集合 mask 的方案数。#include #include #include #include using names原创 2013-09-24 16:26:49 · 2807 阅读 · 0 评论 -
HDU 2296 Ring(AC自动机 + DP 记录方案)
题目链接:Click here~~题意:给 m 个带权值的串,构造一个长度为 n 的串,使总串的权值和最大,并输出字典序最小的方案。解题思路:令 dp[i][j] 表示长度为 i ,位于自动机节点 j 所能构成的最大权值。状态和写法和上道题目类似,然后暴力记录方案。#include #include #include #include原创 2013-09-24 16:09:31 · 878 阅读 · 0 评论 -
HDU 2457 DNA repair(AC自动机 + DP 入门)
题目链接:Click here~~题意:给 n 个带疾病的 DNA 串,然后给一个主串,问如何修改主串中最少个数的字符,使得主串中不包含带疾病的 DNA 串。解题思路:令 dp[i][j] 表示长度为 i,位于自动机中节点 j 的所需要修改的最少字符数。每次转移时枚举下一个可能出现的字符,判断之后会到达的节点,只要不会包含带疾病的 DNA 串就可以进行转原创 2013-09-24 15:53:54 · 2100 阅读 · 0 评论 -
HDU 4534 郑厂长系列故事——新闻净化(AC自动机 + DP)
题目链接:Click here~~题意:给 n 个字符串的集合,有些字符串是要必须在主串出现,有些必须不在主串出现,其他串有分数加成。要求删除最少字符满足要求且使分数最大。解题思路:此题有两个优化目标,令 dp1[i][j][mask] 表示考虑前 i 个字符,跑到节点 j,选取必须字符串的集合为 mask 的最少删除字符数。令 dp2[i][j][mask]原创 2013-09-25 08:14:58 · 2512 阅读 · 0 评论 -
HDU 4511 小明系列故事——女友的考验(AC自动机 + DP)
题目链接:Click here~~题意:中文题。抽象问题:给一个有向无环图,问从 1 号点到 n 号点的最短路径,路径中不能包含某些子串。解题思路:其实也不算难,如果能从“不能包含某些子串”联想到AC自动机,这题基本就解决了。令 dp[i][j] 表示到达 i 号点且位于自动机中的 j 节点所要花费的最短距离。#include #include原创 2013-12-22 10:04:31 · 2269 阅读 · 0 评论 -
HDU 4436 str2int(12年天津区域赛-F题-SA|SAM)
题目链接:Click here~~题意:给 n 个以数字构成的串,求这些串能组成的不重复的子串和(前导 0 也算重复)。(Σsi 解题思路:主流题解貌似都是用后缀自动机搞的。。。这么高端洋气的数据结构我是不太想学了,SA 就学了好几个月。TAT。看括号里多么熟悉的条件啊,那就还是先用特殊字符将大家连起来。(应该用不同的字符隔开,为了方便,我用了相原创 2013-08-11 08:58:48 · 1511 阅读 · 0 评论 -
HDU 4416 Good Article Good sentence(12年杭州网络赛-G题-SA)
题目链接:Click here~~题意:给一个 A 串和若干个 Bi 串,问 A 串中有多少子串不是 Bi 的子串。(na 解题思路:子串问题,很容易往 SA 的方面想。回想我们刚入门的时候,就做过 SA 统计子串个数的问题,我们可以根据那个思路继续想。先将 Bi 的子串都接到 A 串的后面,中间用特殊字符隔开。求出 height[] 后,对于原创 2013-08-09 10:57:13 · 1202 阅读 · 1 评论 -
NBUT 1189 Join the Lyrics Player(字符串处理)
题目链接:Click here~~题意:给你一个lrc歌词文件,文件中,每行前面是若干个时间标签,当当前时间大于等于此标签且小于其他时间标签时,输出此行歌词。然后给你一个时间,输出这个时间应该输出的歌词。解题思路:从这个时间向前找,直到找到某个时间在标签中出现过,然后输出所在标签的歌词。由于时间格式特点,我们可以用一个int型变量储存它的状态i。原创 2012-07-06 18:55:50 · 795 阅读 · 0 评论 -
字典树(Trie)
好像静态的比动态的好,无聊,写了个静态的。#include #include #define CLR(a,v) memset(a,v,sizeof(a))#define MAX 1000010struct Trie{ bool in; Trie* next[26]; //可变}Node[MAX];int top;inline Trie翻译 2012-06-11 10:06:35 · 1766 阅读 · 2 评论 -
HDU 1073 Online Judge
题目链接:Click here~~题意:很有意思的一道题,给你两个文件,判断是AC还是PE还是WA。解题思路:只需要判断两个文件中不同的地方是不是都是空格或者换行或者\t就好了。其他的是一些细节问题,比如数据的输入,换行的处理。主要练习下字符串的处理~O(∩_∩)O~。#include #include char str[5010];void Ready(原创 2012-05-19 20:39:59 · 903 阅读 · 0 评论 -
HDU 1804 Deli Deli
题目链接:Click here~~水水的字符串处理。主要练习下map的用法。不过这道题,让我一下就想起了初中刚学英语的时候,各种怀念啊。题意:输出单词的复数形式。有些是特殊变换的,它事先给你。其他的按照规则变换。解题思路:特殊变换的用map存,其他的直接模拟。#include #include #include #include #include原创 2012-05-22 08:22:59 · 1000 阅读 · 0 评论 -
数字的字符串处理
在一些情况下,我们可能需要把一个字符串中的数字提取出来,这时候如果自己写函数就太麻烦了,c语言标准库中有一些弄好的函数供我们使用。现在我们来一起学习一下吧。1、atoi(char* buf),atof(char* buf)。这两个函数一看名字就猜到了,前者是转换成int,后者是转换成double。我们以atoi为例讲下它的用法。头文件:参数:如上所示。函原创 2012-05-18 17:44:21 · 6287 阅读 · 0 评论 -
SPOJ 694 Distinct Substrings(SA 统计不重复子串个数)
题目链接:Click here~~题意:RT。很适合用来验模板的一道题。(因为除了模板,剩余部分很好写)解题思路:分别考虑以 n 个后缀的开头作为子串的开头的情况,然后相加。假如字符串为 ababc , 则排完序后的后缀应该为:ababc , abc , babc , bc , c ,下面我将 5 种情况分成 5 行写在下面。a、ab、aba、a原创 2013-08-05 19:21:22 · 1105 阅读 · 0 评论 -
后缀数组(SA倍增算法)
我就不吐槽我看了几天了。论文里写的代码,真是呵呵。#include #include #include using namespace std;const int N = 5e4 + 3;int sa[N],rank[N],rank2[N],height[N],cnt[N],*x,*y;/* * a radix_sort which is based on the y翻译 2013-08-05 17:36:54 · 2147 阅读 · 0 评论 -
POJ 1743 Musical Theme(SA 求最长不可重叠重复子串)
题目链接:Click here~~题意:题意是直接搜的。将数列相邻两项作差,得到一个新的数列,求这个数列的最长不重叠子串,最后输出这个最长长度+1。解题思路:竟然是传说中的 楼爷男人8题 之一。先 mark 一下。首先,如果求的是 最长可重叠重复子串,答案便是 height[] 中的最大值。证明:求最长重复子串,等价于求任意两个后缀 lcp原创 2013-08-07 08:34:27 · 1086 阅读 · 0 评论 -
POJ 3261 Milk Patterns(SA 求最长可重叠重复K次子串)
题目链接:Click here~~题意:给一个字符串(int 型),求至少出现 K 次的最长子串,这 K 个子串可以重叠。解题思路:如果明白了上一题,这一题就很好想了。分组后,一个组里面的后缀个数就代表着它们的 lcp 共出现了多少次,故统计好每组个数即可。5 min AC。#include #include #include using原创 2013-08-07 08:57:59 · 1248 阅读 · 0 评论 -
POJ 2774 Long Long Message(SA 求最长公共子串)
题目链接:Click here~~题意:RT。解题思路:类似地,将第二个串接到第一个串的后面,中间用特殊字符隔开。得到height[]后,找出分别属于两个串的后缀的 lcp 的最大值就好了。#include #include #include using namespace std;const int N = 2e5 + 5;int sa[原创 2013-08-07 16:08:23 · 779 阅读 · 0 评论 -
URAL 1297 Palindrome(SA 求最长回文子串)
题目链接:Click here~~题意:RT。解题思路:这题纠结了好久。。。主要是用到了 RMQ,所以我顺手写了个 ST 的模板。结果模板打错,调了1小时+,TAT。先回顾求回文子串的暴力做法,就是枚举中心,依次向两端扩展。SA 做法:先在原字符串后面加一个特殊字符,然后再把原字符串倒过来接到后面去,得到这个长串的 height[]。原创 2013-08-07 13:23:34 · 950 阅读 · 0 评论 -
模版 - KMP
#include #include #include #include using namespace std;namespace __xiaod_kmp { #define foreach(i, l, r) for(int i = (l); i < (r); ++i) typedef vector > VPII; const int N = 100000原创 2014-09-26 10:04:57 · 2065 阅读 · 0 评论