![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
acm---字符串
iwillsucceed555
这个作者很懒,什么都没留下…
展开
-
hdu 1251
字典树!!! 题目代码后后是模板!!! #include #include #include #define MAX 26 using namespace std; struct trie { trie* next[MAX]; int v; }; int main() { char s1[15]; trie *root=(trie*)new(trie); for(int i=0;inext[i]=NULL; while(1) {原创 2010-10-17 22:14:00 · 535 阅读 · 0 评论 -
poj 3461
1 void KMP_next(char b[], int pre[]) { 2 int n = (int)strlen(b), k; 3 pre[0] = -1; k = -1; 4 for(int i = 1; i -1 && b[k+1] != b[i]) k = pre[k]; 6 if(b[k+1] == b[i]) k++; 7 pre[i] = k; 8 } 9 } 1 void KMP_next(原创 2010-10-18 20:41:00 · 513 阅读 · 0 评论 -
poj 1200
<br />字符串hash第一题; #include<iostream> #include<stdio.h> #include<string.h> #define M 100000000 using namespace std; char s[M]; int p[M]; bool hash[5*M]; int main() { int N,NC; while(scanf("%d%d",&N,&NC)==2) { // memset(p,0,sizeof(p));原创 2010-10-23 14:23:00 · 448 阅读 · 0 评论 -
hdu2222
AC自动机处理多窜匹配的题!!! 可以当模板用!!! 详细资料见 :(相当的好) http://wenku.baidu.com/view/f1016624ccbff121dd3683ad.html #include #include #include using namespace std; int N; char keyword[50]; char str[1000005]; struct node { node *fail; node *next[26]; int原创 2010-10-21 22:28:00 · 1223 阅读 · 0 评论 -
poj 1816
<br />字符串匹配!!!<br />我用的是trie树+dfs;<br />写的太长了!!!时间效率也不高!!!<br /> <br />一道纠结很久的题一直强迫自己写出来!!!<br /> <br />wa了几次,错在了判重上<br />*j*j<br />jjj<br />应该是 4<br />但是由于*的存在,find递归是我的结果ans队列中应该有两个是4;所以输出时判断一下是否与前一个一样;<br /><br /> <br /> #include<iostream> #include<std原创 2010-11-13 23:30:00 · 721 阅读 · 0 评论 -
zoj 3432
这道题没做来,对我来说是一个很大的打击,第一:一开始用map,超时,这是必须的,然我深刻的认识到用库对时间效率的影响,就连调用一下string,也是要耗费很长时间的。第二:平时学过的知识,迁移能力很不行,在做这题之前,我已经学习了字符串hash;也学习了位运算,但没深刻的理解他们,特别是位运算;#include #include using namespace std; char str[10]; int main() { int n; while(scanf("%d",&n)原创 2010-11-14 17:33:00 · 629 阅读 · 0 评论 -
poj 2185
思路:KMP很好的一道题。首先易证:最小覆盖子矩阵一定靠左上角。那么,我们考虑求出每一行的最小重复串长度,所有行的最小重复串的长度的lcm就是最小重复子矩阵的宽。然后我们对列也做相同的操作。于是我们就可以求得最小重复子矩阵的大小了。(这里要注意一点:当所得的宽大于原来的宽时,就让等于原来的宽,长也如此)。算法实现:算法的核心在于高效的求出每一行和每一列的最小重复串,这个可以最原串做一次KMP中的get_next()。(注:以上部分为转载)这道题对我这个字符串菜鸟来说实在是有些难;一来是就想来个暴力,但想了想原创 2010-11-21 16:42:00 · 2400 阅读 · 2 评论 -
poj2406
<br />这个题就是用KMP算法的next数组求最小重复子串长度;这与我刚刚做的2185是一个思路;<br />我也是应为理解那个题的解法才做这题;<br />但是我到现在还是没有对算法正确性有很好的认识;<br />姑且但结论记吧:<br />对于代码中i-next[i]代表了字符串最小前缀且满足能不但的复制得到<br />原字符串;len%(i-next[i])==0时代表字符串刚刚是子串的整数倍;<br /> <br />若len%(i-next[i])==0匹配时每一次移动的距离i-next[i]原创 2010-11-22 21:27:00 · 3529 阅读 · 0 评论