| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:【AC】kmp算法In Reply To:【AC】kmp算法 Posted by:jingzhibao at 2015-02-15 14:33:28 > #include<iostream>
> #include<cstdio>
> #include<cstring>
> using namespace std;
>
> void get_next(char* p, int next[])
> {
> int k = -1;
> int j = 0;
> next[0] = -1;
> int len = strlen(p);
> while (j < len)
> {
> if (k == -1 || p[j] == p[k])
> {
> j++;
> k++;
> if (p[j] != p[k])
> {
> next[j] = k;
> }
> else
> {
> next[j] = next[k];
> }
> }
> else
> {
> k = next[k];
> }
> }
> }
>
> int kmp(char* p, char* t, int next[])
> {
> int ans = 0;
> int plen = strlen(p);
> int tlen = strlen(t);
> int i = 0, j = 0;
> while (i < tlen)
> {
> if (j == -1 || p[j] == t[i])
> {
> i++;
> j++;
> }
> else
> {
> j = next[j];
> }
> if (j == plen)
> {
> ans++;
> j = next[j];
> }
> }
> return ans;
> }
> char t[1000010], p[1000010];
> int next[1000010];
> int main()
> {
> int n;
> scanf("%d", &n);
> while (n--)
> {
> scanf("%s", p);
> scanf("%s", t);
> get_next(p, next);
> int ans = kmp(p, t, next);
> printf("%d\n", ans);
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator