Pagini recente » Cod sursa (job #2437991) | Cod sursa (job #812060) | Cod sursa (job #1558847) | Cod sursa (job #3228212) | Cod sursa (job #2339640)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char s[2000001];
char t[2000001];
int p[2000001], n, i, m, sol[1001], l, nr;
int main()
{
f>>s+1>>t+1;
n=strlen(s+1);
m=strlen(t+1);
p[1]=0;
l=0;
for(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(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)
{
nr++;
if(nr<=1000)sol[nr]=i-n;
}
p[i]=l;
}
g<<nr<<'\n';
for(i=1;i<=nr%1000;i++)
g<<sol[i]<<" ";
return 0;
}