Cod sursa(job #3257094)

Utilizator iulia_morariuIuli Morariu iulia_morariu Data 16 noiembrie 2024 16:37:23
Problema Iv Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <fstream>
#include <vector>
//#include <bits/stdc++.h>
#define in fin
#define out fout
#define mod 3210121

using namespace std;

ifstream fin("iv.in");
ofstream fout("iv.out");

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    string a, b; in >> a >> b;
    int n = a.size(), m = b.size();
    int dp[n][n][m]; // i1, j1, i2

    for(int i1 = 0; i1 < n; i1++){
        for(int j1 = 0; j1 < n; j1++){
            for(int i2 = 0; i2 < m; i2++) dp[i1][j1][i2] = 0;
        }
    }

    dp[0][0][m - 1] = 1;
    for(int i1 = 0; i1 < n; i1++){
        for(int j1 = n - 1; j1 >= 0; j1--){
            for(int i2 = 0; i2 < m; i2++){
                int j2 = m - (i1 + i2) - 1;
                dp[i1 + 1][i2][j1] = (dp[i1 + 1][i2][j1] + dp[i1][j1][i2]) % mod;
                dp[i1 + 1][i2][j1 - 1] = (dp[i1 + 1][i2][j1 - 1] + dp[i1][j1][i2]) % mod;
                dp[i1][i2 + 1][j1] = (dp[i1][i2 + 1][j1] + dp[i1][j1][i2]) % mod;
                dp[i1][i2 + 1][j1 - 1] = (dp[i1][i2 + 1][j1 - 1] + dp[i1][j1][i2]) % mod;
            }
        }
    }

    // cout << "dp : \n";
    // for(int i1 = 0; i1 < n; i1++){
    //     for(int j1 = 0; j1 < n; j1++){
    //         for(int i2 = 0; i2 < m; i2++){
    //             cout << i1 << " , " << j1 << " , " << i2 << " = ";
    //             cout << dp[i1][j1][i2] << "\n";
    //         }
    //     }
    // }

    int sum = 0;
    for(int x = 0; x < n; x++){
        for(int y = 0; y < m; y++){
            sum += dp[x][n - x - 1][y];
            sum %= mod;
            // cout << "add dp[" << x << "][" << n - x - 1 << "][" << y << "]\n";
        }
    }

    out << sum << '\n';

    return 0;
}