Pagini recente » Cod sursa (job #510486) | Cod sursa (job #277578) | Cod sursa (job #1513296) | Cod sursa (job #1099036) | Cod sursa (job #3194082)
#include <fstream>
#include <cstring>
#include <vector>
#define MOD 10000007
#define MOD2 20000007
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
long long int y,z,valA,valA2,valB,valB2,contor;
long long int baza61[2000007];
vector <int> A;
vector <int> B;
vector <int> ans;
char s[20000007];
long long int updateA(int st,int dr);
long long int updateB(int st,int dr);
int main()
{
fin>>s;
for(int j=0;s[j];j++)
{
if(isdigit(s[j]))
A.push_back(s[j]-'0');
else
if(islower(s[j]))
A.push_back(s[j]-'a'+10);
else
A.push_back(s[j]-'a'+36);
}
fin>>s;
for(int j=0;s[j];j++)
{
if(isdigit(s[j]))
B.push_back(s[j]-'0');
else
if(islower(s[j]))
B.push_back(s[j]-'a'+10);
else
B.push_back(s[j]-'a'+36);
}
int aux=A.size();
baza61[0]=1;
for(int i=1;i<=aux;i++)
baza61[i]=61*baza61[i-1]%MOD;
valA=updateA(0,aux-1);
for(int i=0;i<B.size()-aux+1;i++)
{
valB=updateB(i,i+aux-1);
if(valB==valA)
{
contor++;
if(contor<=1000)
{
ans.push_back(i);
}
}
}
fout<<contor<<'\n';
for(int i=0;i<ans.size();i++)
fout<<ans[i]<<' ';
return 0;
}
long long int updateA(int st,int dr)
{
long long int x=0;
for(int i=st;i<=dr;i++)
{
x+=A[i]*baza61[dr-st]%MOD;
}
return x;
}
long long int updateB(int st,int dr)
{
long long int x=0;
for(int i=st;i<=dr;i++)
{
x+=B[i]*baza61[dr-st]%MOD;
}
return x;
}