Pagini recente » Cod sursa (job #1361383) | Cod sursa (job #2579531) | Cod sursa (job #3217166) | Cod sursa (job #1026769) | Cod sursa (job #1399731)
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int i,m,p[2000000],q,n,c,u,j[2000000],nr;
string sir,subsir;
char a,v[2000000],v1[2000000];
void prelucrare()
{
q=0;
p[1]=0;
for(i=2;i<=m+1;++i)
{
while(q && v1[q+1]!=v[i])
q=p[q];
if(v1[q+1]==v[i])
q++;
p[i]=q;
}
}
void citire()
{ /*f>>n;
for(i=1;i<=n;i++)
{
f>>v1[i];
}
f>>m;
for(i=1;i<=m;i++)
{
f>>v[i];
}*/
getline(f,subsir);
getline(f,sir);
n=subsir.length();
m=sir.length();
for(i=1;i<=m+1;++i)
{
v1[i]=subsir[i-1];
v[i]=sir[i-1];
}
}
void scriere()
{
for(i=1;i<=m+1;i++)
if(p[i]==n) c++;
}
void partea_a_2_a()
{
for(i=1;i<=m+1;i++)
if(p[i]==n && ++nr<1000) g<<i-n<<" ";
}
int main()
{
citire();
prelucrare();
scriere();
g<<c;
g<<endl;
partea_a_2_a();
}