Pagini recente » Cod sursa (job #2150197) | Cod sursa (job #1076369) | Cod sursa (job #2732202) | Cod sursa (job #2335803) | Cod sursa (job #1836948)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int mod1=10000003;
const int mod2=10000007;
const int alpha=52;
vector<int> ans;
string a,b;
int put1,put2,m1,m2,c1,c2,i,len;
inline int conv(char c)
{
if(c>='A'&&c<='Z') return (26+c-'A');
return (c-'a');
}
int main()
{
ifstream f("strmatch.in");
ofstream g("strmatch.out");
f>>a>>b;put1=1;put2=1;
for(i=0;i<a.size();i++)
{
m1=(m1*alpha+conv(a[i]))%mod1;
m2=(m2*alpha+conv(a[i]))%mod2;
put1=(put1*alpha)%mod1;
put2=(put2*alpha)%mod2;
}
len=a.size();
for(i=0;i<b.size();i++)
{
c1=(c1*alpha+conv(b[i]))%mod1;
c2=(c2*alpha+conv(b[i]))%mod2;
if(i>=len)
{
c1-=(put1*conv(b[i-len]))%mod1;
c2-=(put2*conv(b[i-len]))%mod2;
if(c1<0) c1+=mod1;
if(c2<0) c2+=mod2;
}
if(i>=len-1)
{
cout<<m1<<' '<<c1<<'\n';
if(m1==c1&&m2==c2)
ans.push_back(i-len+1);
}
}
g<<ans.size()<<'\n';
for(i=0;i<min((int)ans.size(),1000);i++)
g<<ans[i]<<' ';
return 0;
}