Pagini recente » Cod sursa (job #868530) | Cod sursa (job #2550776) | Cod sursa (job #771804) | Cod sursa (job #523425) | Cod sursa (job #868684)
Cod sursa(job #868684)
#include<stdio.h>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;
FILE*in=fopen("strmatch.in","r");
FILE*out=fopen("strmatch.out","w");
int constant,compare,pozitie,numar,contor_afisat;
int hareza=1; // numarul ala 7 la a n-1
char citit;
vector<int> a,b,contor_afisa;
int main()
{
while(true)
{
fscanf(in,"%c",&citit);
a.push_back(citit);
if(citit=='\n')
break;
compare*=7;
compare+=(int)citit;
compare%=53;
}
numar=(int)a.size()-1;
while(true)
{
fscanf(in,"%c",&citit);
if(citit=='\n')
break;
b.push_back(citit);
if(pozitie<numar)
{
constant*=7;
constant+=(int)citit;
constant%=53;
if(pozitie!=numar-1)
{
hareza*=7;
hareza%=53;
}
pozitie++;
}
}
for(int i=numar;i<(int)b.size();++i)
{
if(compare==constant)
{
int contor=0;
bool print=true;
for(int j=i-numar;j<i;j++)
{
if(b[j]==a[contor])
contor++;
else
{print=false; break;}
}
if(print)
{
contor_afisat++;
contor_afisa.push_back(i-numar);
}
}
int ajutor;
ajutor=((hareza*b[i-numar])%53);
constant-=ajutor;
constant+=53;
constant%=53;
constant*=7;
constant+=b[i];
constant%=53;
}
fprintf(out,"%d\n",contor_afisat);
for(int i=0;i<contor_afisa.size();++i)
fprintf(out,"%d ",contor_afisa[i]);
printf("%d",'Z');
fclose(in);
fclose(out);
}