Pagini recente » Cod sursa (job #2932099) | Cod sursa (job #3241260) | Cod sursa (job #686296) | Cod sursa (job #280142) | Cod sursa (job #393692)
Cod sursa(job #393692)
#include<stdio.h>
#include<string.h>
#define Nmx 2000002
char s1[Nmx],s2[Nmx];
int v[Nmx],n,m,sol[Nmx],nr;
void citire()
{
fgets(s1+1,Nmx,stdin);
n=strlen(s1+1)-1;
fgets(s2+1,Nmx,stdin);
m=strlen(s2+1)-1;
}
void solve()
{
int k=0;
v[0]=0;
for(int i=2;i<=n&&s1[i]!='\n';++i)
{
while(k&&s1[k+1]!=s1[i])
k=v[k];
if(s1[k+1]==s1[i])
++k;
v[i]=k;
}
k=0;
for(int i=1;i<=m;++i)
{
while(k&&s2[i]!=s1[k+1])
k=v[k];
if(s1[k+1]==s2[i])
++k;
if(k==n)
{
k=v[n];
sol[++nr]=i-n;
}
}
printf("%d\n",nr);
for(int i=1;i<=nr;++i)
printf("%d ",sol[i]);
}
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
citire();
solve();
return 0;
}