Pagini recente » Cod sursa (job #328390) | Cod sursa (job #1347997) | Cod sursa (job #1871733) | Cod sursa (job #1703774) | Cod sursa (job #2056362)
#include <iostream>
#include <fstream>
#include <string.h>
#define Nmax 2000005
using namespace std;
ifstream fin("sir.in");
ofstream fout("sir.out");
int i,q,n,m,k=0;
int pi[100],pos[10000];
char a[Nmax+5],b[Nmax+5];
void prefix()
{
int i,q=0;
for(i=2,pi[1]=0;i<=m;++i)
{
while(q&&a[q+1]!=a[i])q=pi[q];
if(a[q+1]==a[i])++q;
pi[i]=q;
}
}
int main()
{
fin.getline(a,Nmax);
fin.getline(b,Nmax);
m=strlen(a);
n=strlen(b);
for(i=m;i;--i)a[i]=a[i-1];a[0]=' ';
for(i=n;i;--i)b[i]=b[i-1];b[0]=' ';
prefix();
q=0;
for(i=1;i<=n;++i)
{
while(q&&a[q+1]!=b[i])q=pi[q];
if(a[q+1]==b[i])++q;
if(q==m)
{
q=pi[m];
++k;
pos[k]=i-m;
}
}
if(k>1000)k=1000;
for(i=1;i<=k;++i)
fout<<pos[i]<<" ";
return 0;
}