Pagini recente » Cod sursa (job #1560181) | Cod sursa (job #2625818) | Cod sursa (job #3153072) | Cod sursa (job #2938654) | Cod sursa (job #693841)
Cod sursa(job #693841)
#include<stdio.h>
#include<string.h>
FILE *f=fopen("strmatch.in","r");
FILE *g=fopen("strmatch.out","w");
char s[2000003],t[2000003];
int v[2000003],pi[2000003];
void verif(int &k)
{
int q;
q = 0;
int r=0;
int i;
pi[strlen(s)]=1;
for ( i = 1; i <= strlen(t); i++)
{
while (q > 0 && s[q+1] != t[i])
q = pi[q];
if (s[q+1] == t[i])
q++;
if (q == strlen(s)-1) {
v[++k]=i-strlen(s)+1;
q = pi[q];
t[i-strlen(s)+2]='z'+1;}
}
}
int main()
{
int k=0,i;
fscanf(f,"%s",&s);
fscanf(f,"%s",&t);
for (i=strlen(t);i>=0;i--)
t[i+1]=t[i];
for (i=strlen(s);i>=0;i--)
s[i+1]=s[i];
for (i=1;i<=strlen(t);i++)
verif(k);
fprintf(g,"%d\n",k);
for (int i=1;i<=k;i++) fprintf(g,"%d ",v[i]);
return 0;
}