Cod sursa(job #1284553)

Utilizator akaprosAna Kapros akapros Data 6 decembrie 2014 16:42:40
Problema Iv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char s1[505],s2[505];
int a[1005][1005];
int x[505],y[505];
int n,m,i,j,p,q,k,l,ls,k1;
int main()
{
    freopen("iv.in","r",stdin);
    freopen("iv.out","w",stdout);
    gets(s1+1);
    gets(s2+1);
    n=strlen(s1+1);
    m=strlen(s2+1);
    l=n+m;
    a[1][1]=1; a[0][0]=1;
    for (i=1;i<=l;i++)
    for (j=i;j<=l;j++)
    a[i][j]=1;
    for (k=1;k<=l;k++)
    for (k1=k;k1>=1;k1--)
    {
        if (k1==k) {a[k][k1]=1; continue;}
        ls=k-k1+1;
        for (i=max(0,ls-m);i<=min(n,ls);i++)
        {
            j=ls-i;
            if (i)
            if (s1[k-j-i+1]==s1[k-j])
            a[k][k1]=(a[k][k1]+a[k-1][k1+1])%3210121;
            if (j)
            if (s2[k-i-j+1]==s2[k-i])
            a[k][k1]=(a[k][k1]+a[k-1][k1+1])%3210121;
            if ((i)&&(j))
            if (s1[k-j-i+1]==s2[k-i])
            a[k][k1]=(a[k][k1]+a[k-1][k1+1])%3210121;
             if ((i)&&(j))
            if (s2[k-j-i+1]==s1[k-j])
            a[k][k1]=(a[k][k1]+a[k-1][k1+1])%3210121;
        }
    }
    printf("%d",a[n+m][1]);
    return 0;
}