Pagini recente » Cod sursa (job #778234) | Cod sursa (job #1846439) | Cod sursa (job #2900962) | Cod sursa (job #2113915) | Cod sursa (job #2067017)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
char a[2000001],b[2000001];
int v[2000001],r[2000001];
int main()
{
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>a>>b;
int n=strlen(a);
int m=strlen(b);
int i=0,j=1,p=0;
v[0]=0;
while(j<n)
{
if(a[i]==a[j])
{
if(v[i]==0)v[j]=v[j-1]+1;
else v[j]=v[i]+1;
i++;j++;
}
if(a[i]!=a[j])
{
if(i>0)
i--;
else
{
j++;
i=0;
}
}
}
j=0;i=0;
while(i<m)
{
while(b[i]==a[j]&&j<n&&i<m)
{
i++;
j++;
}
if(j==n)
{
r[p]=i-n;
p++;
j=v[j-1];
}
else
{
i++;
j=v[j-1]+1;
}
}
g<<p<<endl;
for(i=0;i<p;i++)
g<<r[i]<<" ";
return 0;
}