Cod sursa(job #1092959)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 27 ianuarie 2014 16:55:33
Problema Subsir Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.63 kb
#include<stdio.h>
int a[500],b[500];
int cmlsc[500][500],sol[500][500];
inline int maxof2(int a,int b)
{
    if(a>b)
        return a;
    return b;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("subsir.in","r");
    fout=fopen("subsir.out","w");
    int n,m,cont=0;
    char c=fgetc(fin);
    while(c!='\n')
    {
        cont++;
        a[cont]=c;
        c=fgetc(fin);
    }
    n=cont;
    cont=0;
    c=fgetc(fin);
    while(c!='\n')
    {
        cont++;
        b[cont]=c;
        c=fgetc(fin);
    }
    m=cont;
    int i;
    for(i=0; i<=n; i++)
        sol[i][0]=1;
    for(i=0; i<=m; i++)
        sol[0][i]=1;
    int j;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        {
            if(a[i]==b[j])
            {
                cmlsc[i][j]=1+cmlsc[i-1][j-1];
                sol[i][j]=sol[i-1][j-1];
            }
            else
            {
                if(cmlsc[i-1][j]>cmlsc[i][j-1])
                {
                    cmlsc[i][j]=cmlsc[i-1][j];
                    sol[i][j]=sol[i-1][j];
                }
                else if(cmlsc[i][j-1]>cmlsc[i-1][j])
                {
                    cmlsc[i][j]=cmlsc[i][j-1];
                    sol[i][j]=sol[i][j-1];
                }
                else
                {
                    cmlsc[i][j]=cmlsc[i-1][j];
                    sol[i][j]=(sol[i][j-1]+sol[i-1][j])%666013;
                    if(cmlsc[i-1][j-1]==cmlsc[i-1][j])
                        sol[i][j]=((sol[i][j]-sol[i-1][j-1])+666013)%666013;
                }
            }
        }
    fprintf(fout,"%d\n",sol[n][m]);
    return 0;
}