Pagini recente » Cod sursa (job #1021260) | Cod sursa (job #862667) | Cod sursa (job #2614872) | Cod sursa (job #2296511) | Cod sursa (job #1987809)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int N,M,P[2000010],K,pos[1020]; char A[2000010],B[2000010];
int main(){
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
fin >> (A+1);
fin >> (B+1);
A[0]=B[0]='.';
N=strlen(A)-1,M=strlen(B)-1;
int i,q=0;
for (i=2; i<=N; i++){
while (q && A[q+1]!=A[i])
q--;
if (A[q+1]==A[i]) q++;
P[i]=q;
}
q=0;
for (i=1; i<=M; i++){
while (q && A[q+1]!=B[i])
q=P[q];
if (A[q+1]==B[i]) q++;
if (q==N){
K++;
q=P[N];
if (K<=1000)
pos[K]=i-N;
}
}
fout << K << "\n";
for (i=1; i<=min(K,1000); i++)
fout << pos[i] << " ";
return 0;
}