Pagini recente » Cod sursa (job #2835385) | Cod sursa (job #547436) | Cod sursa (job #176638) | Cod sursa (job #267352) | Cod sursa (job #2056505)
#include <iostream>
#include <string.h>
#include <fstream>
#define NM 2000005
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
char c,T[NM],P[NM];
int n,m,f,S[NM],k,cnt,sol[NM];
int main()
{
in>>P+1;
n=strlen(P+1);
S[0]=0;
k=0;
for(int i=2;i<=n;++i)
{
while(k>0 && P[k+1]!=P[i])k=S[k];
if(P[k+1]==P[i])++k;
S[i]=k;
}
in>>T+1;
m=strlen(T+1);
k=0;
for(int i=1;i<=m;++i)
{
while(k>0 && P[k+1]!=T[i])k=S[k];
if(P[k+1]==T[i])++k;
if(k==n)
{
out<<i-k<<" ";
k=S[k];///bucata posibil refolosobila
}
}
///bine(teoretic)
return 0;
}