Pagini recente » Borderou de evaluare (job #1879669) | Cod sursa (job #842890) | Cod sursa (job #842882) | Borderou de evaluare (job #2163718) | Cod sursa (job #3159672)
#include <iostream>
#include <cstring>
#include <algorithm>
#define mod 15485863
using namespace std;
char pat[2000001],text[2000001];
int i,j,a,p,t,nr,ans[1000001];
int main()
{
cin.getline(pat,2000001);
cin.getline(text,2000001);
int lpat = strlen(pat);
int ltext=strlen(text);
for(i=0; i<lpat; i++)
p = (p+(int)((pat[i]-'A'+1)*(i+1)))%mod;
for(i=0; i<lpat; i++)
{
t=(t+(int)((pat[i]-'A'+1)*i))%mod;
}
for(i=lpat-1; i<ltext-lpat; i++)
{
if(t==a)
{
for(j=0; j<lpat; j++)
{
if(pat[j]!=text[i+j])
break;
if(j==lpat-1)
{
nr++;
ans[nr]=i;
}
}
}
t=(t-((i)*(int)(text[i-1]-'A'+1)));
t=(t+((i+lpat)*(int)(text[i+lpat-1]-'A'+1)))%mod;
}
for(i=1; i<=max(1000,nr); i++)
cout<<ans[i]<<" ";
return 0;
}