Cod sursa(job #1790140)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 27 octombrie 2016 20:41:54
Problema Iv Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 550
#define MOD 3210121

using namespace std;

char a[MAXN], b[MAXN];
int n, m, din[MAXN][MAXN][MAXN];

void add(int &to, int who)
{
    to = (to+who) % MOD;
}

void solve()
{
    din[0][n+1][0] = 1;
    for (int i = 0; i <= n; i++)
        for (int j = n+1; j >= 1; j--)
            for (int st = 0; st <= m; st++) {
                int dr = n + m + 2 - i - st - j;
                if (a[i] == a[j] && i)
                    add(din[i][j][st], din[i-1][j+1][st]);
                if (a[i] == b[dr] && i)
                    add(din[i][j][st], din[i-1][j][st]);
                if (b[st] == a[j] && st)
                    add(din[i][j][st], din[i][j+1][st-1]);
                if (b[st] == b[dr] && st)
                    add(din[i][j][st], din[i][j][st-1]);
            }
}

void afisare()
{
    int rez = 0;
    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= m; j++)
            add(rez, din[i][i+1][j]);
    printf("%d", rez);
}

int main()
{
    freopen("iv.in", "r", stdin);
    freopen("iv.out", "w", stdout);

    gets(a+1);
    gets(b+1);
    n = strlen(a+1);
    m = strlen(b+1);
    solve();
    afisare();

    return 0;
}