Cod sursa(job #2851559)

Utilizator andreimocianAndrei Mocian andreimocian Data 18 februarie 2022 20:12:13
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int MOD = 10000, V = 90000;
int n, m, x, len;
int dp[2][95000], a[405];

void solve()
{
    if (abs(x) > n * (n + 1) / 2 * m * (m + 1) / 2)
        fout << 0 << "\n";
    else
    {
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                a[++len] = i * j;
            }
        }
        x += 45000;
        dp[0][V / 2] = 1;
        int L = 0;
        for (int i = 1; i <= len; i++)
        {
            L = 1 - L;
            for (int j = 0; j <= V; j++)
            {
                dp[L][j] = dp[1 - L][j];
                if (j >= a[i])
                {
                    dp[L][j] += dp[1 - L][j - a[i]];
                }
                dp[L][j] += dp[1 - L][j + a[i]];
                dp[L][j] = dp[L][j] % MOD;
            }
        }
        fout << dp[L][x];
    }
}

int main()
{
    fin >> n >> m >> x;
    solve();
    return 0;
}