Cod sursa(job #266270)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 25 februarie 2009 10:11:43
Problema Subsir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#include<string.h>
#define DIM 502
int n,m,v[DIM][DIM],q;
char a[DIM],b[DIM];
void read ()
{
    int i;
    gets (a);
    gets (b);
    n=strlen(a);
    m=strlen(b);
    for(i=n;i>=0;--i)
        a[i]=a[i-1];
    for(i=m;i>=0;--i)
        b[i]=b[i-1];
}
int max (int x,int y)
{
    if(x<y)
        return y;
    return x;
}
void solve ()
{
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            if(a[i]==b[j])
                v[i][j]=v[i-1][j-1]+1;
            else
                v[i][j]=max ( v[i-1][j], v[i][j-1]);
}
void show ()
{
    int i,j,k=1,k2=0;
    for(i=n-1;i>0;--i)
    {
        k2=0;
        if(v[n][m]==v[i][m])
        {
            ++k;
            for(j=1;j<m;++j)
                if(v[i][j]==v[i+1][j])
                    ++k2;
            if(k2==m-1)
                --k;
        }
    }
    printf("%d",k);
}
int main ()
{
    freopen("subsir.in","r",stdin);
    freopen("subsir.out","w",stdout);
    read ();
    solve ();
    show ();
    return 0;
}