Pagini recente » Cod sursa (job #968522) | Cod sursa (job #2650778) | Cod sursa (job #1415662) | Cod sursa (job #376839) | Cod sursa (job #2339661)
#include <bits/stdc++.h>
#define min(a,b) a < b ? a : b
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char s[2000010];
char t[2000010];
int sol[1002];
int p[2000010];
int n, m, L, aparitii = 0, i;
int main()
{
fin>>s+1;
fin>>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)
{
aparitii++;
if (aparitii <= 1000)
sol[aparitii] = i-n;
L = p[L];
}
}
fout<<aparitii<<"\n";
aparitii = min(1000, aparitii);
for (i=1; i<=aparitii; i++)
fout<<sol[i]<<" ";
return 0;
}