Pagini recente » Cod sursa (job #2086443) | Cod sursa (job #1021212) | Cod sursa (job #1093122) | Cod sursa (job #2832865) | Cod sursa (job #218371)
Cod sursa(job #218371)
#include <cstdio>
#include <cstring>
#define MAXIMUS 2000002
using namespace std;
char s[MAXIMUS],s1[MAXIMUS];
int nr,poz[MAXIMUS],k,sol[1001],zz;
int l1,l2;
void pref()
{
for(int i=1;i<l1;i++)
{
while(k && s[k]!=s[i])
k=poz[k];
if(s[k]==s[i])
k++;
poz[i+1]=k;
}
}
void cauta()
{
k=0;
for(int i=0;i<l2;i++)
{
while(k && s[k]!=s1[i])
k=poz[k];
if(s[k]==s1[i])
k++;
if(k==l1)
{
nr++;
if(zz<1000)
sol[zz++]=i-l1+1;
k=poz[k];
}
}
}
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
scanf("%s\n%s",s,s1);
l1=strlen(s);
l2=strlen(s1);
pref();
cauta();
printf("%d\n",nr);
for(int i=0;i<zz;i++)
printf("%d ",sol[i]);
fclose(stdin);
fclose(stdout);
return 0;
}