Pagini recente » Cod sursa (job #2171879) | Cod sursa (job #2549991) | Cod sursa (job #1297360) | Cod sursa (job #897631) | Cod sursa (job #1915755)
#include <cstdio>
#include <cstring>
using namespace std;
char s1[2000010],s[2000010];
int prefix[2000010],n,m,q=0,x=0,pos[2000010],ok=0,ok1=0;
void citire()
{
scanf("%s",s1);
scanf("%s",s);
n=strlen(s1);
m=strlen(s);
}
void prefix1()
{
int i=0,j=1;
while(j<=n-1)
{
if(s1[i]==s1[j])
{
prefix[j]=i+1;
i++;
j++;
}
else if(i!=0)
{
i=prefix[i-1];
}
else
j++;
}
}
void cerinta()
{
int j=0,i=0;
while(i<=m-1)
{
if(s[i]==s1[j])
{
i++;
j++;
if(j==n)
{
pos[0]++;
pos[pos[0]]=i-n;
}
}
else
if(j)
{
j=prefix[j-1];
}
else
i++;
}
int nr;
if(pos[0]>=1000)
nr=1000;
else
nr=pos[0];
printf("%d\n",nr);
for(int i=1;i<=nr;i++)
printf("%d ",pos[i]);
}
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
citire();
prefix1();
cerinta();
//cout << "Hello world!" << endl;
return 0;
}