3
HDU1711 Number Sequence(KMP)
source link: https://arminli.com/hdu1711/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Armin's Blog
HDU1711 Number Sequence(KMP)
March 13, 2016
KMP 模版题,求子串第一次出现的位置
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<vector> #include<map> #include<queue> #include<stack> #include<string> using namespace std; int n, m; int next[10005]; int a[1000005], b[10005]; void kmp_pre(int x[],int m,int nextt[]){ int i, j; j = nextt[0] = -1; i = 0; while(i < m){ while(-1!=j && x[i]!=x[j]) j = nextt[j]; nextt[++i] = ++j; } } int KMP_Index(int x[], int m, int y[], int n){ int i = 0, j = 0; kmp_pre(x, m, nextt); while(i < n && j < m){ if(j == -1 || y[i] == x[j]){ i++; j++; } else j = nextt[j]; } if(j == m) return i-m; else return -1; } int main(){ //freopen("a.txt", "r", stdin); int t; cin >> t; while(t--){ int tem; 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]); } int ans = KMP_Index(b, m, a, n); if(ans == -1) cout << "-1" << endl; else cout << ans+1 << endl; } return 0; }
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK