Mai intai trebuie sa te autentifici.
Cod sursa(job #2439477)
Utilizator | Data | 16 iulie 2019 10:05:17 | |
---|---|---|---|
Problema | Potrivirea sirurilor | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.92 kb |
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
char a[2000010], b[2000010];
int p=31, mod=145367;
void citire()
{
fin>>a>>b;
}
void solve()
{
int hasha=0, hashb=0, c=1;
vector<int>sol;
for(int i=0; i<strlen(a); i++)
{
hasha=hasha*p+a[i];
hasha=hasha%mod;
c=c*p%mod;
}
for(int i=0; i<strlen(a); i++)
{
hashb=hashb*p+b[i];
hashb%=mod;
}
if(hasha==hashb)
{
sol.push_back(0);
}
for(int i=strlen(a); i<strlen(b); i++)
{
hashb=(mod+(hashb*p)%mod-(b[i-strlen(a)]*c)%mod+b[i])%mod;
if(hasha==hashb)
{
sol.push_back(i-strlen(a)+1);
}
}
fout<<sol.size()<<'\n';
for(auto i:sol)
{
fout<<i<<' ';
}
}
int main()
{
citire();
solve();
return 0;
}