Pagini recente » Cod sursa (job #1994648) | Cod sursa (job #351740) | Cod sursa (job #2073041) | Cod sursa (job #1887975) | Cod sursa (job #1426045)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
//#include <conio.h>
#define pb push_back
#define mp make_pair
#define MOD 1000000007
#define newl printf("\n")
using namespace std;
int n,m,pi[2000005];
char a[2000005],b[2000005];
vector <int> sol;
void make_prefix()
{
pi[1]=0;
int k=0;
for (int i=2;i<=n;i++)
{
while (k>0 && a[i]!=a[k+1]) k=pi[k];
if (a[i]==a[k+1]) k++;
pi[i]=k;
}
}
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
gets(a+1); n=strlen(a+1);
gets(b+1); m=strlen(b+1);
make_prefix();
int k=0;
for (int i=1;i<=m;i++)
{
while (k>0 && b[i]!=a[k+1]) k=pi[k];
if (b[i]==a[k+1]) k++;
if (k==n)
{
if (sol.size()<1000) sol.pb(i-n);
k=pi[k];
}
}
printf("%d\n",sol.size());
for (int i=0;i<sol.size();i++)
printf("%d ",sol[i]);
return 0;
}