http://poj.org/problem?id=3461&&kmp
来源:互联网 发布:c语言中for是什么意思 编辑:程序博客网 时间:2024/05/22 04:24
这一题真是让我纠结,,本以为kmp算法已经掌握很熟练了,木想到tle,,尼玛的什么kmp,然后又看了看书,,发现这竟然和我写的kmp不一样,于是按书重新写了一遍,竟然木有超时,,我表示很受伤啊!!
AC代码:
#include<iostream>#include<string.h>#include<string>using namespace std;int Next[10001];string a,b;void kmp(){ int n=a.size(); int m=b.size(); int k=-1; Next[0]=-1; for(int i=1;i<n;++i) { while(k>-1&&a[i]!=a[k+1]) k=Next[k]; if(a[i]==a[k+1]) k++; Next[i]=k; } int sum=0,j=-1; for(int i=0;i<m;++i) { while(j>-1&&b[i]!=a[j+1]) j=Next[j]; if(b[i]==a[j+1]) j++; if(j==n-1) {sum++;j=Next[j];} } cout<<sum<<endl;}int main(){ int Case; cin>>Case; while(Case--) { cin>>a>>b; kmp(); }return 0;}下面贴出我超时的代码,望哪位神牛看到给指点一下,,,,
#include<iostream>#include<string.h>#include<cstdio>#include<string>using namespace std;int nex[10001];string a,b;void kmp(){ int n=a.size(); nex[0]=0; int i=0,j=1; while(j<n) { if(a[j]==a[i]) { nex[j]=i+1; i++;j++; } else{ if(i>0) i=nex[i-1]; else nex[j++]=0; } }}int main(){ int Case; scanf("%d",&Case); while(Case--) { cin>>a>>b; memset(nex,0,sizeof(nex)); kmp(); int i=0,j=0; int n=b.size(); int m=a.size(); int sum=0; while(i<n) { if(a[j]==b[i]) { if(j==m-1) {sum++;j=nex[j-1];} else {i++;j++;} } else{ if(j>0) j=nex[j-1]; else i++; } } printf("%d\n",sum); }return 0; }
- http://poj.org/problem?id=3461&&kmp
- http://poj.org/problem?id=2965
- http://poj.org/problem?id=2075
- http://poj.org/problem?id=1125
- http://poj.org/problem?id=2983
- http://poj.org/problem?id=2406
- http://poj.org/problem?id=1961
- http://poj.org/problem?id=1486
- http://poj.org/problem?id=1062
- http://poj.org/problem?id=2983
- http://poj.org/problem?id=3159
- http://poj.org/problem?id=1201
- http://poj.org/problem?id=3259
- http://poj.org/problem?id=3233
- http://poj.org/problem?id=1273
- http://poj.org/problem?id=3281
- http://poj.org/problem?id=1007
- http://poj.org/problem?id=1840
- Redhat修改主机名
- AQA2011年度沙龙汇总
- Hadoop 集群安装详细步骤
- 华文C8650刷回原厂系统
- delphi 进度条
- http://poj.org/problem?id=3461&&kmp
- 守住难得的那份宁静
- delphi中Assigned的含义
- 采用C++的ACE库实现的一个通用的C/S架构通信程序(最终版)
- 动态库知识
- asp.net 视图 存储过程 使用实例
- IQuickTest工作室 - 每月自动化测试资讯汇总(2011年12月)
- Android HAL层基础
- 浅谈:飞秋 程序设计之网络通信