Cod sursa(job #255112)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 8 februarie 2009 18:11:53
Problema Iv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#define maxn 202
using namespace std;

long d[maxn][maxn][maxn];
long n, i, j, k, l1, l2, sol, l;
char a[maxn], b[maxn];

int main()
{
    freopen("iv.in", "r", stdin);
    freopen("iv.out", "w", stdout);
    scanf("%c", &a[1]);
    l1=1;
    while(a[l1]>='A')
    {
        l1++;
        scanf("%c", &a[l1]);
    }
    l1--;
    scanf("%c", &b[1]);
    l2=1;
    while(b[l2]>='A')
    {
        l2++;
        scanf("%c", &b[l2]);
    }
    l2--;
    d[0][0][l1+1]=1;
    for(i=0; i<=l1; i++)
    {
        for(j=0; j<=l2; j++)
        {
            for(k=i+1; k<=l1+1; k++)
            {
                l=l1+l2-k+2-i-j;
                if(a[i+1]==a[k-1] && i+1<=k-1) d[i+1][j][k-1]+=d[i][j][k];
                if(a[i+1]==b[l-1] && i+1<=l-1) d[i+1][j][k]+=d[i][j][k];
                if(b[j+1]==a[k-1] && j+1<=k-1) d[i][j+1][k-1]+=d[i][j][k];
                if(b[j+1]==b[l-1] && j+1<=l-1) d[i][j+1][k]+=d[i][j][k];
            }
            for(k=i; k<=i+1; k++)
            {
                l=l1+l2-k+2-i-j;
                if(l-j<=1 && k-i<=1) sol+=d[i][j][k];
            }
        }
    }
    printf("%d\n", sol);
    return 0;
}