Pagini recente » Cod sursa (job #794612) | Cod sursa (job #1660840) | Cod sursa (job #694006) | Cod sursa (job #1525764) | Cod sursa (job #2074775)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char s[2000010],p[2000010];
int l[2000010],sl[2000010];
int main()
{
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
fin.getline(p,2000010);
fin.getline(s,2000010);
int n=strlen(s),m=strlen(p),i=1,j=0,ns=0;
l[0]=0;
while(i<m)
if(p[i]==p[j])
{
l[i]=j+1;i++;j++;
}
else if(j==0){l[i]=0;i++;}
else j=l[j-1];
i=j=0;
while(i<n)
if(s[i]==p[j])
{
i++;j++;
if(j==m)
{
sl[ns++]=i-m;
j=l[j-1];
}
}
else if(j==0)i++;
else j=l[j-1];
fout<<ns<<"\n";
for(i=0;i<ns;i++)fout<<sl[i]<<" ";
return 0;
}