Pagini recente » Cod sursa (job #1167835) | Cod sursa (job #2552236) | Cod sursa (job #1967051) | Cod sursa (job #247486) | Cod sursa (job #1830929)
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAX 2000010
using namespace std;
char a[MAX],s[MAX];
int poz[MAX],nr,sol[MAX];
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
scanf("%s\n",a);
scanf("%s\n",s);
int i=1,j=0;
int n=strlen(a);
while (i<n)
{
if (a[i]==a[j])
{
poz[i]=j+1;
j++;
}
else
if(j==0)
i++;
else
if (i==1)
poz[i]=0;
else
{
while (a[i]!=a[j])
{
j--;
if (j==0)
break;
}
poz[i]=poz[j];
}
i++;
}
i=0;
j=0;
int m=strlen(s);
while (i<m)
{
if (a[j]==s[i])
{
i++;
j++;
}
else
if(j!=0)
{
j=poz[j-1];
}
else
i++;
if(j==n)
sol[nr++]=i-n;
}
cout<<nr<<endl;
for(i=0;i<nr;i++)
cout<<sol[i]<<" ";
return 0;
}