Pagini recente » Cod sursa (job #1702825) | Cod sursa (job #3184630) | Cod sursa (job #1908315) | Cod sursa (job #643960) | Cod sursa (job #2827935)
#include <fstream>
using namespace std;
ifstream fin("strmatch.in");
ofstream fout("strmatch.out");
const int mod=1999957, sigma=62, smax=1000;
string a,b;
int v[smax+1];
int char_int(char x){
if(x>='0'&&x<='9'){
return x-'0';
}else if(x>='A'&&x<='B'){
return x-'A'+10;
}else{
return x-'a'+36;
}
}
int main(){
fin>>a>>b;
int na=a.size(), nb=b.size();
if(na<=nb){
int sol=0;
int nra=0, nrb=0;
for(int i=0;i<na;i++){
nra=(nra*sigma+char_int(a[i]))%mod;
}
int p=1;
for(int i=1;i<na;i++){
p=(p*sigma)%mod;
}
for(int i=0;i<nb;i++){
if(i>=na){
nrb=(mod+nrb-(char_int(b[i-na])*p)%mod)%mod;
}
nrb=(nrb*sigma+char_int(b[i]))%mod;
if(i>=na-1&&nra==nrb){
sol++;
if(sol<=1000){
v[sol]=i;
}
}
}
fout<<sol<<"\n";
for(int i=1;i<=sol&&i<=1000;i++){
fout<<v[i]<<" ";
}
}else{
fout<<0<<"\n";
}
return 0;
}