Pagini recente » Cod sursa (job #2144298) | Cod sursa (job #3171630) | Cod sursa (job #1140620) | Cod sursa (job #2376467) | Cod sursa (job #2339713)
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char s[2000010],t[2000010];
int n,m,L,aparitii,p[2000010],sol[2000010];
int main()
{
f>>s+1>>t+1;
n=strlen(s+1);
m=strlen(t+1);
p[1]=0;
for(int i=2; i<=n; i++){
while(L!=0&&s[i]!=s[L+1])
L=p[L];
if(s[i]==s[L+1])
L++;
p[i]=L;
}
L=0;
for(int i=1; i<=m; i++)
{
while(L!=0&&t[i]!=s[L+1])
{
L=p[L];
}
if(t[i]==s[L+1])L++;
if(L==n)
{
aparitii++;
if(aparitii<=1000)
sol[aparitii]=i-n;
L=p[L];
}
}
g<<aparitii<<'\n';
if(aparitii>1000)aparitii=1000;
for(int i=1; i<=aparitii; i++)
g<<sol[i]<<" ";
}