Pagini recente » Cod sursa (job #1768198) | Cod sursa (job #1201293) | Cod sursa (job #2951371) | Cod sursa (job #1580512) | Cod sursa (job #2047078)
#include <iostream>
#include <fstream>
#include <cstring>
#define Dmax 2000005
#define d 73
#define q 100007
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
char P[Dmax],T[Dmax],sol[Dmax],nr;
int n,m;
int verif(int s)
{ for(int i=1;i<=m;i++)
if(P[i]!=T[s+i]) return 0;
return 1;
}
int main()
{ f>>(P+1)>>(T+1);
m=strlen(P+1),n=strlen(T+1);
if(m>n) return 0;
int h=1;
for(int i=1;i<m;i++) h=h*d%q;
int p=0,t=0;
for(int i=1;i<=m;i++)
{ p=(p*d+P[i])%q;
t=(t*d+T[i])%q;
}
for(int s=0;s<=n-m;s++)
{ if(p==t && verif(s)) sol[++nr]=s;
if(s<n-m) t=((d*(t-T[s+1]*h)+T[s+m+1])%q+q)%q;
}
for(int i=1;i<=nr;i++)
g<<sol[i];
return 0;
}