#include<iostream>
#include<cstdio>
#include "message.h"
#include "poszukiwania.h"
using namespace std;
#define MX 500000
int w[MX];
int wzor[MX];
int P[MX];
int main(){
int N,M;
N=SeqLength();
M=SignalLength();
for(int i=0;i<N;++i){
w[i]=SeqAt(i+1);
}
for(int i=0;i<M;++i){
wzor[i]=SignalAt(i+1);
}
--N;
--M;
int j=0;
int i=0;
int wyn=0;
while(i < N)
{
if(wzor[j] == w[i])
{
j++;
i++;
}
if (j == M)
{
++wyn;
j = P[j-1];
}
else if(wzor[j] != w[i])
{
if(j != 0) j = P[j-1];
else i = i+1;
}
}
if( MyNodeId() == 0 ) printf("%d",wyn);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include<iostream> #include<cstdio> #include "message.h" #include "poszukiwania.h" using namespace std; #define MX 500000 int w[MX]; int wzor[MX]; int P[MX]; int main(){ int N,M; N=SeqLength(); M=SignalLength(); for(int i=0;i<N;++i){ w[i]=SeqAt(i+1); } for(int i=0;i<M;++i){ wzor[i]=SignalAt(i+1); } --N; --M; int j=0; int i=0; int wyn=0; while(i < N) { if(wzor[j] == w[i]) { j++; i++; } if (j == M) { ++wyn; j = P[j-1]; } else if(wzor[j] != w[i]) { if(j != 0) j = P[j-1]; else i = i+1; } } if( MyNodeId() == 0 ) printf("%d",wyn); } |
English