Pagini recente » Cod sursa (job #304394) | Cod sursa (job #110055) | Cod sursa (job #230002) | Cod sursa (job #3129264) | Cod sursa (job #2058421)
#include<iostream>
#include<fstream>
#include<string>
#include<vector>
#define DX 2000200
using namespace std;
fstream fin("strmatch.in",ios::in),fout("strmatch.out",ios::out);
string a,b;
vector<int> r;
int la,lb,pi[DX];
void fpi()
{
int i,k=0;
pi[0]=pi[1]=0;
for(i=2;i<=la;i++)
{
while(k!=0 && a[k+1]!=a[i]) k=pi[k];
if(a[k+1]==a[i]) k++;
pi[i]=k;
}
}
int main()
{
int i,poz=0,nr=0;
fin>>a>>b;
la=a.size(); lb=b.size();
a='0'+a; b='0'+b;
fpi();
for(i=1;i<=lb;i++)
{
while(poz!=0 && a[poz+1]!=b[i]) poz=pi[poz];
if(a[poz+1]==b[i]) poz++;
if(poz==la)
{
nr++;
r.push_back(i-la);
poz=pi[poz];
}
}
fout<<nr<<"\n";
if(nr>1000) nr=1000;
for(i=0;i<nr;i++) fout<<r[i]<<" ";
fout<<"\n";
}