Hdu 1711 KMP Number Sequence
2013-05-20 19:30
561 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1711
题目意思:
给两个数组,如果第一个数组包括第二个数组,输出最小的位置。否则输出-1.
解题思路:
裸的KMP。
代码:
http://acm.hdu.edu.cn/showproblem.php?pid=1711
题目意思:
给两个数组,如果第一个数组包括第二个数组,输出最小的位置。否则输出-1.
解题思路:
裸的KMP。
代码:
#include<iostream> #include<cmath> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<algorithm> #include<vector> #include<map> #include<stack> #include<list> #include<queue> #define eps 1e-6 #define INF (1<<30) #define PI acos(-1.0) using namespace std; int nn[1100000],mm[11000]; int m,n,next[11000]; void getnext() { next[1]=0; int j=0; for(int i=2;i<=m;i++) { while(j>0&&mm[i]!=mm[j+1]) j=next[j]; if(mm[i]==mm[j+1]) j++; next[i]=j; //注意不要包括当前元素,如 1 1 next为0,1 } return ; } int Cal() { int j=0; for(int i=1;i<=n;i++) { while(j>0&&mm[j+1]-nn[i]) //向前推移 j=next[j]; if(mm[j+1]==nn[i]) //如果相等,加一个 j++; if(j==m) return i-m+1; //返回位置 } return -1; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&nn[i]); for(int i=1;i<=m;i++) scanf("%d",&mm[i]); getnext(); printf("%d\n",Cal()); } return 0; }
相关文章推荐
- hdu 1711 Number Sequence KMP
- HDU 1711:Number Sequence(KMP)
- HDU 1711 Number Sequence KMP
- hdu 1711 Number Sequence kmp模式匹配
- HDU1711 Number Sequence KMP基础
- HDU 1711:Number Sequence (KMP入门)
- HDU 1711 Number Sequence kmp
- HDU 1711 (裸KMP) 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 KMP
- hdu 1711 Number Sequence KMP
- HDU 1711 Number Sequence KMP入门
- HDU 1711 Number Sequence——kmp
- hdu 1711 Number Sequence KMP(水)
- HDU 1711 Number Sequence KMP
- hdu Number Sequence(KMP)
- 4000 HDU--1711 Number Sequence