Pagini recente » Cod sursa (job #2896780) | Cod sursa (job #1115887) | Cod sursa (job #1690475) | Cod sursa (job #18375) | Cod sursa (job #2576550)
#include <bits/stdc++.h>
#define MOD 1000003
using namespace std;
ifstream fi("strmatch.in");
ofstream fo("strmatch.out");
char text[2000000];
char pattern[1000000];
queue<int> q;
int main()
{
fi.getline(pattern,2000000);
fi.getline(text,2000000);
int lp=strlen(pattern);
int lt=strlen(text);
long long put=1;
long long pat=0;
long long control=0;
int rez=0;
for(int i=0; i<lp; i++)
{
pat=(pat*26 + pattern[i])%MOD;
control=(control*26 + text[i])%MOD;
put%=MOD;
put*=26;
}
put/=26;
for(int i=0; i<=lt-lp; i++)
{
if(control==pat)
{
rez++;
q.push(i);
}
if(i<lt-lp)
{
control=(26*(control-text[i]*put)+text[i+lp])%MOD;
if(control<0)
{
control+=MOD;
}
}
}
fo<<rez<<'\n';
int dim= q.size();
dim=min(1000, dim);
for(int i=0;i< dim;i++)
{
fo<<q.front()<<" ";
q.pop();
}
fi.close();
fo.close();
return 0;
}