Pagini recente » Cod sursa (job #1873590) | Cod sursa (job #427887) | Cod sursa (job #2583831) | Cod sursa (job #1447868) | Cod sursa (job #2469302)
#include <fstream>
#include <iostream>
#define NMAX 20000
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
void make_prefix(char *a,int *lp)
{
int len=0,i=1;
lp[0]=0;
while(a[i]!='\00')
{
if(a[i]==a[len])
{
++len;
lp[i]=len;
++i;
}
else
{
if(len)
len=lp[len-1];
else
{
lp[i]=0;
++i;
}
}
}
}
int main()
{
char a[NMAX],b[NMAX];
f.getline(a,NMAX,'\n');
f.getline(b,NMAX,'\n');
int lp[NMAX]={0};
make_prefix(a,lp);
int i=0,j=0,nr=0,v[1000];
while(b[j]!='\00')
{
if(a[i]==b[j])
{
++i;
++j;
if(a[i]=='\00')
{
v[nr++]=j-i;
if(nr==1000)
break;
i=lp[i-1];
}
}
else
{
if(i)
i=lp[i-1];
else
++j;
}
}
g<<nr<<'\n';
for(i=0;i<nr;++i)
g<<v[i]<<' ';
return 0;
}