蒟蒻kmp写崩了求助
查看原帖
蒟蒻kmp写崩了求助
671420
panda791130楼主2023/2/18 10:08

rt

#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[1000010], b[1000010], cnt = 0, ans = 0, ct = 0, kmp[1000010], la, lb, j;
int x, y;
int main()
{
    scanf("%d %d", &n, &m);
    scanf("%d", &x);
    for(int i = 2; i <= n; i++){
        scanf("%d", &y);
        a[++cnt] = (y - x);
        x = y;
    }
    cnt = 0;
    scanf("%d", &x);
    for(int i = 2; i <= m; i++){
        scanf("%d", &y);
        b[++cnt] = (y - x);
        x = y;
    }
    la = n - 1;
    lb = m - 1;
    for(int i = 2; i <= lb; i++){
        while(j && b[i] != b[j + 1]){
            j = kmp[j];
        }
        if(b[j + 1] == b[i]){
            j++;
        }
        kmp[i] = j;
    }
    for(int i = 2; i <= lb; i++){
        while(j && b[i] != b[j + 1]){
            j = kmp[j];
        }
        if(b[j + 1] == b[i]){
            j++;
        }
        kmp[i] = j;
    }
    j = 0;
    for(int i = 1; i <= la; i++){
        while(j && a[i] != b[j + 1]){
            j = kmp[j];
        }
        if(b[j + 1] == a[i]){
            j++;
        }
        if(j == lb){
            ans++;
        }
    }
    printf("%d", ans);
    return 0;
}
2023/2/18 10:08
加载中...