Pagini recente » Cod sursa (job #1909378) | Cod sursa (job #594951) | Cod sursa (job #528144) | Cod sursa (job #1212585) | Cod sursa (job #2439517)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char a[2000006],b[2000006];
long long p1=31,p2=101,mod1=456231,mod2=298145,stra,strb;
void citire()
{
fin>>a>>b;
stra=strlen(a);
strb=strlen(b);
}
void solve()
{
long long hasha1=0,hashb1=0,c=1,hasha2=0,hashb2=0;
vector<int>sol;
for(int i=0;i<stra;i++)
{
hasha1=hasha1*p+a[i];
hasha1=hasha1%mod;
hasha2=hasha2*p+a[i];
hasha2=hasha2%mod;
c=c*p%mod;
}
for(int i=0;i<stra;i++)
{
hashb=hashb*p+b[i];
hashb=hashb%mod;
}
if(hasha==hashb)
{
sol.push_back(0);
}
for(int i=stra;i<strb;i++)
{
hashb=(mod+(hashb*p)%mod-(b[i-stra]*c)%mod+b[i])%mod;
if(hasha==hashb)
{
sol.push_back(i-stra+1);
}
}
fout<<sol.size()<<"\n";
for(int i=0;i<min(int(sol.size()),1000);i++)
{
fout<<sol[i]<<" ";
}
}
int main()
{
citire();
if(stra>strb)
{
fout<<0;
return 0;
}
solve();
return 0;
}