HDU 4749 && POJ 3167 KMP

来源:互联网 发布:php源码包下载地址 编辑:程序博客网 时间:2024/05/20 19:31

RT

这个题是POJ3167的修改版,基本一致

 

#include <map>#include <set>#include <queue>#include <stack>#include <cmath>#include <cstdio>#include <vector>#include <string>#include <cstring>#include <iostream>#include <algorithm>#include <functional>using namespace std;const int N = 100005; int x[N], a[N], nex[N]; int pr1[N][30], pr2[N][30], n, m, s; void init() {    memset(pr1, 0, sizeof(pr1));     memset(pr2, 0, sizeof(pr2));     pr1[1][x[1]] = pr2[1][a[1]] = 1;     for(int i = 2; i <= n; i++) {        memcpy(pr1[i], pr1[i-1], sizeof(pr1[0]));         pr1[i][x[i]]++;     }    for(int i = 2; i <= m; i++) {        memcpy(pr2[i], pr2[i-1], sizeof(pr2[0]));         pr2[i][a[i]]++;     }}void getnex() {    memset(nex, 0, sizeof(nex));     int i = 1, j = 0, k, si, sj, ei, ej;     nex[1] = 0;     while(i <= m) {        si = sj = ei = ej = 0;         for(k = 1; k < a[i]; k++)            si += pr2[i][k]-pr2[i-j][k];         ei = pr2[i][k]-pr2[i-j][k];         for(k = 1; k < a[j]; k++)            sj += pr2[j][k];         ej = pr2[j][k];         if(j == 0||(si == sj&&ei == ej))            i++, j++, nex[i] = j;         else j = nex[j];     }}void gao() {    int i, j, k, si, sj, ei, ej, pre = -1, num = 0;     for(i = j = 1; i <= n; ) {        si = sj = ei = ej = 0;         for(k = 1; k < x[i]; k++)            si += pr1[i][k]-pr1[i-j][k];         ei = pr1[i][k]-pr1[i-j][k];         for(k = 1; k < a[j]; k++)            sj += pr2[j][k];         ej = pr2[j][k];         if(j == 0||(si == sj&&ei == ej))            i++, j++;         else j = nex[j];         if(j == m+1) {            if (i - 1 - m >= pre) {                num ++;                 pre = i - 1;             }            j = nex[j];         }    }    printf("%d\n", num); }int main() {    while(scanf("%d%d%d", &n, &m, &s) != EOF) {        for(int i = 1; i <= n; i++)            scanf("%d", &x[i]);         for(int i = 1; i <= m; i++)            scanf("%d", &a[i]);         init();         getnex();         gao();     }    return 0; }

原创粉丝点击