数据结构
DMX
这个作者很懒,什么都没留下…
展开
-
poj1363
题意:给出数据,如果进栈的方式为1……N,判断该数据能否是出栈的顺序。分析:用栈的知识模拟就可以A掉,用x表示进栈的数,y表示出栈的下一个需要的序号,用数组模拟栈,比较x,y是否相等,若等,则等于进栈再直接出栈;若不等,则x进栈,再比较y和栈顶是否相等,若等,出栈,否则进行下一次循环,追后若y都能出来, 则有该序列,否则输出No。wa的原因:代码实现的时候少写了一条语句。AC代码:原创 2012-05-29 16:07:43 · 1320 阅读 · 0 评论 -
poj1226(字符串)
题意:找出给出的n个串中的最长的公共字串,输出其长度。分析:这道题比较水,KMP,string,strstr应该是都能过的,暴力就行。wa的原因:这题比较颠覆我的世界观,一模一样的代码,scanf无限TLE,全改成cin AC。不理解是为什么,求大牛指点。AC的代码:#include#include#include#includeusing namespace std;cha原创 2012-06-01 14:03:33 · 392 阅读 · 0 评论 -
KMP算法详解
kmp模板:#include#includeusing namespace std;string a,b;int p[10000];int i,j,m,n;int main(){ cin>>a; cin>>b; n=a.length(); m=b.length(); p[0]=-1; j=-1; for(i=1;i<=b.le转载 2012-06-01 12:39:32 · 302 阅读 · 0 评论 -
poj2752(对next数组理解)
题意:求出串中所有前缀和后缀相同的情况的相同字串的长度.分析:因为要找后缀与前缀相同,只需判断next中最后一个的值,因为next[len]代表的是s[0~next[len]-1]与s[len-next[len]~len-1]两个串相同,所以如果存在,则继续向前找,如果最后以为就不匹配说明只有当长度为len时才会发生前缀与后缀相同.也就是说原串全选,前缀和后缀肯定是相同的.wa的原因:1A原创 2012-06-04 20:35:02 · 346 阅读 · 0 评论 -
poj1961(2406的推广)
题意:求前i个字符中重复的个数k(如果可以的话)分析:完全就是2406,只不过2406是判断全部的AC代码:#include#includeusing namespace std;char t[1000005];int next[1000005];int m;void get_next(){ next[0]=-1; int i,j=-1; for(i=1;i<m;原创 2012-06-04 21:32:35 · 435 阅读 · 0 评论 -
poj2406(next数组理解)
题意:能用最长子串重复得到原串,问重复多少次.分析:需要考虑这种特殊情况azazaza,正确答案应该是1,所以说,需要判断len%(len-next[len])?=0.别的就是直接输出len/(len-next[len])就行,因为next[len]代表着后缀与前缀多少位是相同的,所以说,最长的肯定是len/(len-next[len]).wa的原因:1AAC代码:#include原创 2012-06-04 20:53:40 · 443 阅读 · 0 评论 -
poj3461(kmp模版题)
题意:求短串在长串中有几个.分析:直接kmp模版.因为next是指短串对自身的匹配,其中的数字next[i]一定满足s[0~next[i]-1]与s[i-next[i]+1~i]是相同的串,所以很显然可以用此方法求出在长串对短串的匹配,如果j==lenb,则证明有该串.wa的原因:1AAC代码:#include#include#includeusing namespace s原创 2012-06-04 20:23:06 · 457 阅读 · 0 评论