Pagini recente » Cod sursa (job #1302067) | Cod sursa (job #2915828) | Cod sursa (job #2864596) | Cod sursa (job #595910) | Cod sursa (job #2976279)
#include <fstream>
using namespace std;
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
char a[2000001],b;
long long s[2000001];
long long nr1=10003,nr2=666013,nr3,nr4=0,nr5=0,nr6=0,nr7=0,x=1,y=1,j,aux;
long long v[2000001];
int main()
{
int n,m,i=0;
cin>>a;
///cin>>b;
for(j=0;a[j]!=NULL && a[j]!='\n';j++){
if(a[j]>='A' && a[j]<='Z')
nr3=a[j]-'A'+1;
else
if(a[j]>='a' && a[j]<='z')
nr3=26+a[j]-'a'+1;
else
if(a[j]>='0' && a[j]<='9')
nr3=52+a[j]-'0'+1;
nr4*=62;
nr5*=62;
nr4+=nr3;
nr5+=nr3;
nr4%=nr1;
nr5%=nr2;
if(j!=0){
x=x*62%nr1;
y=y*62%nr2;
}
}
while(cin>>b){
if(b>='A' && b<='Z')
nr3=b-'A'+1;
else
if(b>='a' && b<='z')
nr3=26+b-'a'+1;
else
if(b>='0' && b<='9')
nr3=52+b-'0'+1;
s[i]=nr3;
if(i>j-1){
nr6+=nr1;
nr7+=nr2;
nr6-=(s[i-j]*x)%nr1;
nr7-=(s[i-j]*y)%nr2;
nr6=(nr6*62)%nr1;
nr7=(nr7*62)%nr2;
nr6+=nr3;
nr7+=nr3;
nr6%=nr1;
nr7%=nr2;
if(nr6==nr4 && nr7==nr5){
aux++;
v[aux]=i-j+1;
}
}
else{
nr6*=62;
nr7*=62;
nr6+=nr3;
nr7+=nr3;
nr6%=nr1;
nr7%=nr2;
if(nr6==nr4 && nr7==nr5)
if(nr6==nr4 && nr7==nr5){
aux++;
v[aux]=i-j+1;
}
}
i++;
}
cout<<aux<<'\n';
if(aux>=1000 )
aux=1000 ;
for(i=1;i<=aux;i++)
cout<<v[i]<<" ";
return 0;
}