Cod sursa(job #2834334)

Utilizator Maniu_DianaManiu Maria Diana Maniu_Diana Data 16 ianuarie 2022 20:47:34
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

const int mod = 10000, V = 90000;

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

int n, m, x, a[405], len, dp[2][95000];


int main()
{
    fin >> n >> m >> x;
    if(abs(x) > n*m*(n+1)*(m+1)/4)
        fout << 0 << '\n';
    else
    {
        for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= m; j ++)
            a[++len] = i * j;
    x += 45000; //offset
    dp[0][V/2] = 1; //primul element
    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]; //nu e L - 1, ca merg pe negative :-)
            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] %= mod;
        }
    }
    fout << dp[L][x] << '\n';
}
    return 0;
}