Pagini recente » Cod sursa (job #669460) | Cod sursa (job #3210792) | Cod sursa (job #249694) | Cod sursa (job #1655780) | Cod sursa (job #1964159)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char c[2000003], sir[2000003];
int i, j, p[2000003], l, L, contor, start[2000003];
int main()
{
fin>>c;
fin>>sir;
l = strlen(c);
L = strlen(sir);
for(i = 1; i < l; ++i)
{
while(j)
{
if(c[i] == c[j])
{
++j;
p[i] = j;
break;
}
j = p[j - 1];
}
if(!j)
{
if(c[i] == c[j])
{
++j;
p[i] = j;
}
}
}
j = 0;
for(i = 0; i < L; ++i)
{
while(j)
{
if(c[j] == sir[i])
{
++j;
break;
}
j = p[j - 1];
}
if(!j)
{
if(c[j] == sir[i])
{
++j;
}
}
else if(j == l)
{
start[contor] = i - l + 1;
++contor;
j = p[l - 1];
}
}
fout<<contor<<'\n';
for(i = 0; i < contor; ++i)
{
fout<<start[i]<<" ";
}
return 0;
}