Pagini recente » Cod sursa (job #1565990) | Cod sursa (job #182449) | Cod sursa (job #128743) | Cod sursa (job #2609871) | Cod sursa (job #2576566)
#include <bits/stdc++.h>
#define MOD 100007
using namespace std;
ifstream fi("strmatch.in");
ofstream fo("strmatch.out");
char text[2000001];
char pattern[2000001];
queue<int> q;
int main()
{
fi.getline(pattern,2000001);
fi.getline(text,2000001);
int lp=strlen(pattern);
int lt=strlen(text);
if(lp>lt)
{
fo<<0;
fi.close();
fo.close();
return 0;
}
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;
}