Pagini recente » Cod sursa (job #1432323) | Cod sursa (job #868601) | Cod sursa (job #220373) | Cod sursa (job #2745347) | Cod sursa (job #645144)
Cod sursa(job #645144)
#include <fstream>
#include <cstring>
using namespace std;
int N,M,pr[2000100],sol,v[2000100];
char A[2000100],B[2000100];
int main()
{
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>(A+1)>>(B+1);
N=strlen(A+1);M=strlen(B+1);
for(int i=2,k=0;i<=N;++i)
{
while(k>0 && A[k+1]!=A[i]) k=pr[k];
if(A[k+1]==A[i]) ++k;
pr[i]=k;
}
for(int i=1,k=0;i<=M;++i)
{
while(k>0 && A[k+1]!=B[i]) k=pr[k];
if(A[k+1]==B[i]) ++k;
if(k==N)
v[++sol]=i-k,k=pr[k];
}
g<<sol<<'\n';
for(int i=1;i<=sol;++i) g<<v[i]<<' ';
g.close();
return 0;
}