Pagini recente » Cod sursa (job #1231343) | Cod sursa (job #1961341) | Cod sursa (job #3128766) | Cod sursa (job #2457239) | Cod sursa (job #1713540)
#include <bits/stdc++.h>
using namespace std;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
const int NMAX=2000003;
const unsigned int Base=73;
char a[NMAX];
char b[NMAX];
unsigned int cifre[NMAX];
unsigned int Put[NMAX];
vector <int> Poz;
inline unsigned long long Decode(const int st,const int dr)
{
unsigned long long ret=cifre[dr]-cifre[st-1]*Put[dr-st+1];
return ret;
}
int main()
{
int len,lenb;
unsigned long long sira=0;
int cnt=0;
f>>(a+1);
f>>(b+1);
len=strlen(a+1);
lenb=strlen(b+1);
for(int i=1;i<=len;i++)
sira=sira*Base+(a[i]-'0');
Put[0]=1;
for(int i=1;i<=lenb;i++)
{
Put[i]=Put[i-1]*Base;
cifre[i]=cifre[i-1]*Base+(b[i]-'0');
}
for(int i=1;i<=lenb;i++)
{
if(Decode(i-len+1,i)==sira)
{
cnt++;
if(i<=1000)
Poz.push_back(i-len);
}
}
g<<cnt<<"\n";
for(int i=0;i<Poz.size();i++)
g<<Poz[i]<<" ";
return 0;
}