Pagini recente » Cod sursa (job #1038442) | Cod sursa (job #2639495) | Cod sursa (job #2761815) | Cod sursa (job #557649) | Cod sursa (job #1798398)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char N[2000002],M[2000002],x;
int i,n,m,k,q;
int urm[2000002],v[2000000];
int main()
{
f>>N;
f>>M;
n=strlen(N);
m=strlen(M);
for(i=2; i<=n; i++)
{
while(k>0&&N[i-1]!=N[k])
k=urm[k];
if(N[i-1]==N[k])
k++;
urm[i]=k;
}
k=0;
for(i=0; i<m; i++)
{
while(q>0&&M[i]!=N[q])
q=urm[q];
if(M[i]==N[q])
q++;
if(q==n)
{
k++;
v[k]=i-n+1;
}
}
g<<k<<'\n';
for(i=1; i<=min(k,1000); i++)
g<<v[i]<<" ";
return 0;