Pagini recente » Cod sursa (job #2879316) | Cod sursa (job #1262323) | Cod sursa (job #3256358) | Cod sursa (job #79901) | Cod sursa (job #1337907)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#define NMAX 2000002
using namespace std;
char a[NMAX],b[NMAX];
int q[NMAX],nr,v[1000];
int minim(int a, int b)
{
if(a<b)
return a;
return b;
}
void citire()
{
ifstream fin("strmatch.in");
fin>>(a+1);
fin>>(b+1);
}
void strmatch()
{
int c=0,d=strlen(a+1),r=0;
for(int i=2;i<=strlen(a+1);++i)
{
while(a[i]!=a[c+1] && c!=0)
c=q[c];
if(a[i]==a[c+1])
c++;
q[i]=c;
}
c=0;
for(int i=1,c=0;i<=strlen(b+1);++i)
{
while(b[i]!=a[c+1] && c!=0)
c=q[c];
if(a[c+1]==b[i])
c++;
if(c==d)
{
nr++;
if(nr<=1000)
{
v[nr]=i-d;
}
}
}
}
void afisare()
{
ofstream fout("strmatch.out");
fout<<nr<<"\n";
for(int i=1;i<=minim(a,1000);++i)
fout<<v[i]<<" ";
}
int main()
{
citire();
strmatch();
afisare();
return 0;
}