ACM[字符串处理]
sevenster
= = 水男
展开
-
HDU 2222 AC_Automation 第一道AC自动机
整整一天半都在弄AC自动机,我的第一道AC自动机。DEBUG N久竟然是题目意思读错了!题目大意:给定N个单词,和一个模式串,求在单词模式串中出现的次数。解题思路,先构造字典树,再对字典树进行AC自动机。我DEBUG N久.... 原来AC自动机都是构造的对的!题目要注意的地方。1.单词可以重复出现。2.只是问最多有多少个单词出现在模式串中,最多为单词数N个。继原创 2012-03-24 17:02:46 · 458 阅读 · 0 评论 -
FZU 1481 KMP
【题目大意】判断两条环形字符串是否相同。【思路】将待匹配串复制一份接在后面,再用模式串做KMP,若能找到说明为同一个串。蛮久没写KMP了,算法忘得差不多了..小悲剧啊~【CODE】#include#includeusing namespace std;char t[222],s[444];int next[222];void setNext(){原创 2012-05-04 14:33:31 · 617 阅读 · 0 评论 -
POJ 3461 HDU 1686 赤果果的KMP
果断吃果果....不解释...#includeusing namespace std;char s[1111111],t[11111];int next[11111],lenS,lenT;int cnt;void setNext(){ int j=0,k=-1; next[0]=-1; while( j<lenT ) {原创 2012-03-22 21:48:36 · 917 阅读 · 0 评论 -
POJ 2001 字典树裸模版
再做几个字典树就去AC自动机...... 加油!用模板感觉不错啊!!细节细节!!#include#include#include#define MAX 26using namespace std;struct TireNode{ int nCount; TireNode *next[MAX];};TireNode Memeroy[11原创 2012-03-23 09:52:55 · 562 阅读 · 0 评论 -
HDU 3746 Cyclic Nacklace KMP的性质应用
前面做过类似的题了,所以切出这个来也很简单。关于KMP的小应用,KMP的next数组的作用就是用来记录前面的串的状态的。可以用Len-next[Len]得出当前点的循环节。。。这个还是很好理解的。好了KMP在切掉POJ的就在此告一段落了。。。。#includeusing namespace std;char t[111111];int next[111111];int原创 2012-03-23 01:17:07 · 464 阅读 · 0 评论 -
HDU 1711 裸KMP
终于会KMP了... 哇哈哈哈~#includeusing namespace std;int T,N,M;int next[11111];int s[1111111],t[11111];void setNext(){ int j=1,k=0; while( j<=M ) { if( k==0 || t[j]==t[原创 2012-03-22 21:52:25 · 607 阅读 · 0 评论 -
POJ 1961 HDU 1358 KMP的性质
题目大意:求给出串的每个前缀串的重复次数。例如aabaabaabaab;1.aa中前缀a出现2次。2.aabaab中前缀aab出现2次3.aabaabaab中前缀aab出现3次4.aabaabaabaab中前缀aab出现4次.大概就是这么个意思。这里利用了kmp中的next标记的性质。看看这个字符串下标:1 2 3 4 5 6 7 8 9 10原创 2012-03-22 21:41:17 · 521 阅读 · 0 评论 -
HDU 1671 轻轻松松字典树
这题的难度和前一篇的裸模版差不多。题目大意就是看字符串是否是其他字符串的前缀,其实就是在字典树中查看最后一个节点的count数是否为1.若为1,则代表该字符串唯一。若不唯一,则代表该字符串被其他字符串完全包含,不就是前缀么!水过。。。#include#include#include#define MAX 10using namespace std;c原创 2012-03-23 12:00:19 · 456 阅读 · 0 评论 -
HDU 1251 字典树裸模板
以前也写过字典树,觉得自己写得很不好,很水很弱,虽然也ac了。网上看了下别人的模板,果断学习之.......#include#include#include#define MAX 26 using namespace std;struct TrieNode{ int nCount; TrieNode *next[MAX];};TrieNod原创 2012-03-23 08:59:31 · 549 阅读 · 0 评论 -
HDU 2087 水KMP
KMP...#include#include#include#includeusing namespace std;char s[1111],t[1111];int next[1111];int lenS,lenT;void setNext(){ int j=1,k=0; while( j<=lenT ) {原创 2012-03-22 21:55:10 · 527 阅读 · 0 评论 -
HDU 3336 KMP+DP
匹配用的KMP,另外+DP存储状态;DP数组f[i]代表当前前缀可以匹配的次数。f[i]=f[next[i]]+1;为next[i]--i的的前缀的数量。计算总和即可。#includeusing namespace std;char t[222222];int next[222222],f[222222]; int L;void setNext(){原创 2012-03-22 22:03:53 · 473 阅读 · 0 评论 -
POJ 3974 最长回文 Manacher算法
容斥刷不动啊!!今天十分的邪恶加猥琐的注册了一个小号和大一的孩子们一起做题;也没有要和他们比赛的意思,只是我对算法有很多不熟悉的,所以呢....哎 我的号交几个题,小号交几个题。做都做了,不管了。晚上花了一个半小时才看懂的一个算法Manacher,专门用来做回文的....网上其他的人写得佷详细了,我还是说说自己的吧。Manacher利用了回文的性质。假设有一个回文以id为中原创 2012-03-22 21:21:20 · 705 阅读 · 0 评论 -
HDU 2243
这题WA了.. 实在找不出错,CP了很多AC代码,大数据都是一样的。哪位大神行行好帮我看看哪错了吧.....#include#include#include#define kind 26#define MAX 100using namespace std;struct node{ int fail,flag; int next[kind]; vo原创 2012-03-30 18:47:29 · 515 阅读 · 0 评论 -
POJ 2778 AC自动机+矩阵乘法
这题要写的东西很多,以至于我不知道从哪里开始写了= =。总之要正确理解AC自动机中的状态转移。时间比较晚了,早点回去... 我要注意的地方就是正确理解fail指针的作用。在失配时,fail指针如果走向的是一个病毒节点那么改节点的转移也是病毒节点。不能转移!另外要注意的就是mod十分的耗时间啊!两次TLE都是出于此....总之是一道好题#include#include#inc原创 2012-03-28 22:12:19 · 599 阅读 · 0 评论 -
初等字符串匹配专题小结[KMP][Manacher][Tire Tree][AC Automation]
刷了3天的字符串匹配题。为了下面继续切题,小的先小结一些。字符串匹配的最基础算法是枚举(n^2)。高深一点的是KMP。KMP在数据结构课上学过,由于老师只是负责教学,不负责解答他不懂的问题,于是KMP就这么被我搁置一边了。ACM这么多年了,一直不懂这些基础的算法,实在有愧与心。于是乎专程学习了一下KMP。先说说KMP的主要思想。KMP用于模式串的匹配。下面看看一个字符串原创 2012-03-24 22:28:42 · 820 阅读 · 0 评论 -
HDU 3065 AC自动机模板题
最后一道模板题。下面把AC自动机小结一下。请看新文章.....这题如果只开26的next的数组的话。在查询大串时,要注意的if( s[i] )当不符合条件时,不能浅显的continue,而要把p=root;不然..... 那些在A-Z之外的字符会直接略去,相当于大串中没有A-Z之外的字符,结果可想而知!!#include#include#include#define MA原创 2012-03-24 21:19:58 · 482 阅读 · 0 评论 -
HDU 2896 AC自动机
第二道AC自动机。和前面那道没有什么不同,都是基础的AC自动机模板。题目大意:有一些病毒序列,在主串中找到所有的病毒种类即可。求出每个网站携带的病毒种类。最后输出有多少个病毒网站。还好输出不坑爹!#include#include#include#define MAX 128using namespace std;struct node{ int id原创 2012-03-24 18:44:17 · 421 阅读 · 0 评论 -
求解中缀表达式...
E- Seven tombsTime Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 31 Accepted Submission(s) : 9Font: Times New Roman | Verdana | Georgia原创 2012-08-20 17:30:39 · 908 阅读 · 0 评论