Pagini recente » Cod sursa (job #3290080) | Cod sursa (job #2045917) | Clasament sunt_o_bestie | Cod sursa (job #2476195) | Cod sursa (job #393698)
Cod sursa(job #393698)
#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=m=1;
for(;(s1[n]>='A'&&s1[n]<='Z')||(s1[n]>='0'&&s1[n]<='9')||(s1[n]>='a'&&s1[n]<='9');++n);
fgets(s2+1,Nmx,stdin);
for(;(s2[m]>='A'&&s2[m]<='Z')||(s2[m]>='0'&&s2[m]<='9')||(s2[m]>='a'&&s2[m]<='9');++m);
n--;m--;
}
void solve()
{
int k=0;
v[0]=0;
for(int i=2;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];
if(nr<1000) 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;
}