Pagini recente » Cod sursa (job #2436873) | Cod sursa (job #1715362) | Cod sursa (job #31552) | Cod sursa (job #740020) | Cod sursa (job #1225836)
#include <fstream>
#include<string>
using namespace std;
#define MX 2000010
string a,b;
int pi[MX], k, i, n,m, ns, sol[1024] ;
int main()
{
ifstream f1("strmatch.in");
ofstream f2("strmatch.out");
f1>>a;
f1>>b;
a=' '+a;
b=' '+b;
n= a.length()-1;
m= b.length()-1;
k=0;
pi[1]=0;
for (i=2; i<=n; i++ )
{ while (k>0 && a[k+1]!=a[i] )
k=pi[k];
if (a[k+1]==a[i] )
k++;
pi[i]=k; }
k=0;
for (i=1; i<=m && ns<=1000; i++)
{ while (k>0 && a[k+1]!=b[i] )
k=pi[k];
if (a[k+1]==b[i] )
k++;
if (k==n)
sol[++ns]=i-n;
}
f2<<ns<<"\n";
for (i=1; i<=ns; i++)
f2<<sol[i]<<" ";
f1.close();
f2.close();
return 0;
}