Pagini recente » Cod sursa (job #1607563) | Cod sursa (job #772844) | Cod sursa (job #2188757) | Cod sursa (job #249325) | Cod sursa (job #1276130)
#include <iostream>
#include <cstdio>
#include <cstring>
#define N 2000002
#define P 191LL
#define mod 6074001001LL
char substr[N],str[N];
int main ()
{
FILE *fin=fopen("strmatch.in","r");
FILE *fout=fopen("strmatch.out","w");
fscanf(fin,"%s %s", substr, str);
long long int hash_substr = 0LL;
int len = strlen(substr);
long long int P_len = 1LL;
for(int i=0;i<len; i++)
{
hash_substr = (hash_substr * P + substr[i]) % mod;
P_len = (P_len * P) % mod;
}
long long int hash_str=0;
int i;
for(i=0;i<len;i++)
{
hash_str = (hash_str*P + str[i]) % mod;
}
for(;i<strlen(str);i++)
{
if(hash_str==hash_substr)
{
printf("%d ", i-len);
}
hash_str = (hash_str * P + str[i] - P_len*str[i - len]) % mod;
}
return 0;
}