Pagini recente » Cod sursa (job #849414) | Cod sursa (job #1668589) | Cod sursa (job #2544537) | Cod sursa (job #705) | Cod sursa (job #2439493)
#include <bits/stdc++.h>
using namespace std;
ifstream in("strmatch.in");
ofstream out("strmatch.out");
char a[2000010],b[2000010];
int p=31,mod=457231,stra,strb;
void citire()
{
in>>a>>b;
stra=strlen(a);
strb=strlen(b);
}
void solv()
{
int hasha=0,hashb=0,c=1;
vector<int>sol;
for(int i=0;i<stra;i++)
{
hasha=(hasha*p+a[i])%mod;
c=c*p%mod;
}
for(int i=0;i<stra;i++)
{
hashb=(hashb*p+b[i])%mod;
}
if(hasha==hashb)
{
sol.push_back(0);
}
for(int i=stra;i<strb;i++)
{
hashb=(mod+hashb*p-(b[i-stra]*c)%mod+b[i])%mod;
if(hasha==hashb)
{
sol.push_back(i-stra+1);
}
}
out<<sol.size()<<'\n';
for(int i=0;i<min(int(sol.size()),1000);i++)
{
out<<sol[i]<<' ';
}
}
int main()
{
citire();
if(stra>strb)
{
out<<0;
return 0;
}
solv();
return 0;
}