Cod sursa(job #1020370)

Utilizator taigi100Cazacu Robert taigi100 Data 1 noiembrie 2013 23:47:19
Problema Potrivirea sirurilor Scor 38
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <cstdio>
#include <string.h>
int v[1005],cont;
void cautare(char *s,int n ,char *p,int m)
{
    int i,j,k,d[256];
 
    for ( i=0 ; i < 256 ; i ++)
    d[i]=m;
    for ( j=0 ; j < m-1 ; j++)
        d[p[j]]=m-j-1;
    i=j=m;
    while (i<=n)
    {
        j=m;
        k=i;
        while(j>0 && ( s[k-1]==p[j-1] ) )
        {
            k--;
            j--;
        }
        if(j>0)
            i=i+d[s[k-1]];
        if(j<=0)
        {
            if(cont<1000)
            {
            v[cont++]=i-m;
            i=i+d[p[m-1]];
            }
            else
                return ;
        }
    }
    return ;
}
int main()
{
    freopen("strmatch.in","r",stdin);
    freopen("strmatch.out","w",stdout);
    char s[2000005],p[2000005];
    int m,n;
    scanf("%s%s",p,s);
    n=strlen(s);
    m=strlen(p);
    cautare(s,n,p,m);
    printf("%d\n",cont);
    for(int i=0 ; i < cont ; i ++)
    printf("%d ",v[i]);
 
}