【从字符到数字】HDU 1711 Number Sequence
2013-01-20 15:06
483 查看
KMP模板题,链接:点击打开链接
基本没有什么变化,如果硬说有的话,就是把字母变成了数字。输入时请注意scanf,这个题估计输入规模极大。。cin会TLE的。。
2AC(第一次用cin了):
基本没有什么变化,如果硬说有的话,就是把字母变成了数字。输入时请注意scanf,这个题估计输入规模极大。。cin会TLE的。。
2AC(第一次用cin了):
#include <iostream> #include <stdio.h> using namespace std; int next[10005]; int a[1000005]; int b[10005]; void build_next(int b[],int bnum) { int i,j=0; memset(next,0,sizeof(next)); for(i=1;i<bnum;i++) { j=next[i-1]; while(j==1 && b[i]!=b[j]) { j=next[j-1]; } if(b[j]==b[i]) { next[i]=j+1; } else next[i]=0; } } int KMP_Find(int s[],int t[],int pos,int m,int n) { build_next(t,n); int i=pos; int j=0; for(i=pos;i<m;i++) { while(j>0 && s[i]!=t[j]) { j=next[j-1]; } if(s[i]==t[j]) { j++; } else { j=0; } if(j==n) //目标串匹配结束 { return i-n+1; } } return -1; } int main() { int testcase; cin>>testcase; while(testcase--) { int nnum,mnum; cin>>mnum>>nnum; for(int i=0;i<mnum;i++) { scanf("%d",&a[i]); } for(int j=0;j<nnum;j++) { scanf("%d",&b[j]); } int lg=KMP_Find(a,b,0,mnum,nnum); if(lg==-1) { cout<<"-1"<<endl; } else { cout<<lg+1<<endl; } } return 0; }
相关文章推荐
- HDU 1711 Number Sequence (数字KMP,变形)
- HDU 1711 Number Sequence【数字KMP】
- 【KMP字符串匹配】hdu 1711 Number Sequence
- HDU 1711 Number Sequence (数字KMP)
- HDU 1711 Number Sequence(字符串匹配)
- HDU 1711 Number Sequence (字符串匹配,KMP算法)
- HDU 1711 Number Sequence(字符串匹配)
- hdu 1711 Number Sequence(kmp模板题)
- hdu 1711 Number Sequence KMP 基础题
- HDU 1711 Number Sequence
- hdu 1711 Number Sequence
- hdu——1711——Number Sequence
- hdu 1711 Number Sequence KMP 基础题
- HDU 1711 Number Sequence
- hdu 1711 Number Sequence(KMP算法)
- HDU 1711 Number Sequence (kmp)
- HDU 1711 Number Sequence(KMP算法)
- HDU 1711 Number Sequence
- 【KMP模板】HDU 1711 Number Sequence
- HDU 1711 Number Sequence【KMP】【模板题】【水题】(返回匹配到的第一个字母的位置)