HDU1711-KMP算法
来源:互联网 发布:兰亭序真迹在哪里 知乎 编辑:程序博客网 时间:2024/06/06 03:34
题目链接HDU1711
这是一道KMP题,没什么好说的,直接模拟的话时间会爆(复杂度为O(n*m)),而KMP为O(n+m)。至于KMP的解释,可以拿数据结构书翻翻讲得非常清楚(严蔚敏版第四章串的模式匹配算法)
我第一遍提交的时候时间也爆了,因为我用的是cin/cout,改成scanf/printf就好了,因为才开始刷ACM的题,之前只是听说过cin/cout会花很长世间,但没有具体概念,可以去查查,尽量少用它吧
#include<iostream>using namespace std;void get_next(int *t,int *next){ int i=1,j=0; next[1]=0; while(i<=t[0]){ if(t[i]==t[j]||j==0){ i++; j++; if(t[i]!=t[j]) next[i]=j; else next[i]=next[j]; } else j=next[j]; }}int index_kmp(int *s,int *t,int *next){ int i=1,j=1; while(i<=s[0]&&j<=t[0]){ if(s[i]==t[j]||j==0){ i++; j++; } else j=next[j]; } if(j>t[0]) return i-t[0]; else return -1;}int main(){ int i,j,k,n,m; scanf("%d",&k); for(i=0;i<k;i++){ scanf("%d %d",&n,&m); int s[n+1],t[m+1],next[m+16],num; s[0]=n,t[0]=m; for(j=1;j<n+1;j++){ scanf("%d",&s[j]); } for(j=1;j<m+1;j++){ scanf("%d",&t[j]); } get_next(t,next); num=index_kmp(s,t,next); printf("%d\n",num); }}
0 0
- HDU1711-KMP算法
- hdu1711(kmp算法)
- hdu1711 Number Sequence kmp算法
- HDU1711-Number Sequence-KMP算法(模板)
- hdu1711 Number Sequence(KMP算法)
- HDU1711(KMP算法模板题)
- kmp hdu1711
- hdu1711 kmp
- hdu1711(kmp)
- HDU1711-KMP
- hdu1711 KMP
- hdu1711 kmp
- HDU1711 KMP
- HDU1711 (KMP)
- hdu1711 KMP
- KMP-hdu1711
- hdu1711 KMP模板
- Number Sequence hdu1711 KMP
- Web视频播放 之 【HTML5 Video标签】
- POJ1759-Garland
- 认识CoreData—多线程
- Android之ActionBar(demo)
- Android MediaRecorder 后台视频录制
- HDU1711-KMP算法
- ActiveRecord中实现软删除
- pch文件配置
- Python 基础归纳整理
- python——函数
- Give the common ancestor of all the deepest nodes of a tree
- 最近公共祖先
- android开发 使用RecycleView加载数据
- 使用vlc实现视频TS流的推送