HDU 1711 (裸KMP) Number Sequence
2014-11-20 02:20
405 查看
题意:
用第二个数列去匹配第一个数列,输出第一次匹配到的位置,如果没有则输出-1.
分析:
这明显是一道裸的KMP。
我是在这篇博客上学的KMP算法的,讲得比较透彻。
http://blog.csdn.net/v_july_v/article/details/7041827
代码君
用第二个数列去匹配第一个数列,输出第一次匹配到的位置,如果没有则输出-1.
分析:
这明显是一道裸的KMP。
我是在这篇博客上学的KMP算法的,讲得比较透彻。
http://blog.csdn.net/v_july_v/article/details/7041827
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn1 = 1000000 + 10; const int maxn2 = 10000 + 10; int a[maxn1], b[maxn2], next[maxn2]; int n, m; void get_next() { next[0] = -1; int k = -1; int j = 0; while(j < m - 1) { if(k == -1 || b[j] == b[k]) { k++; j++; next[j] = k; } else k = next[k]; } } int KMP() { int i = 0, j = 0; while(i < n && j < m) { if(j == -1 || a[i] == b[j]) { i++; j++; } else j = next[j]; } if(j == m) return i - j; return -2; } int main() { //freopen("in.txt", "r", stdin); int T; scanf("%d", &T); while(T--) { memset(next, 0, sizeof(next)); scanf("%d%d", &n, &m); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); for(int i = 0; i < m; ++i) scanf("%d", &b[i]); get_next(); printf("%d\n", KMP()+1); } return 0; }
代码君
相关文章推荐
- 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入门
- HDU1711 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 1711 HDOJ 1711 Number Sequence ACM 1711 IN HDU
- hdoj 1711 KMP Number Sequence