Pagini recente » Cod sursa (job #2571839) | Cod sursa (job #49412) | Cod sursa (job #1250725) | Cod sursa (job #3187071) | Cod sursa (job #2868755)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
int pi[2000010], sol[1010];
char a[2000010],b[2000010];
int n,N;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
void prefixare()
{
int q=0;
pi[1]=0;
for(int i=2;i<=n;i++)
{
while(q && a[q+1] != a[i])
q = pi[q];
if(a[q+1] == a[i])
q++;
pi[i] = q;
}
}
int main()
{
fin>>a+1>>b+1;
n = strlen(a+1);
prefixare();
int q=0;
for(int i=1;b[i];i++)
{
while(q && a[q+1] != b[i])
q = pi[q];
if(a[q+1] == b[i])
q++;
if(q == n)
{
q = pi[q];
N++;
if(N<=1000)
sol[N] = i;
}
}
fout<<N<<'\n';
int af = min(N,1000);
for(int i=1;i<=af;i++)
fout<<sol[i]-n<<' ';
return 0;
}