Cod sursa(job #2691736)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 29 decembrie 2020 19:12:38
Problema Diamant Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

const int MOD = 1e4;
const int BASE = 210 * 210;
const int N = 2 * BASE + 1;

long long dp[N];

int main() {
    ifstream in("diamant.in");
    ofstream out("diamant.out");

    int nl, nc, x, minq, maxq, mini, maxi;
    in >> nl >> nc >> x;
    minq = maxq = mini = maxi = BASE;
    dp[BASE] = 1;
    for (int i = 1; i <= nl; ++i)
        for (int j = 1; j <= nc; ++j) {
            for (int k = maxq; k >= minq; --k)
                if (dp[k]) {
                    dp[k + i * j] += dp[k];
                    maxi = max(maxi, k + i * j);
                }
            for (int k = minq; k <= maxq; ++k)
                if (dp[k]) {
                    dp[k - i * j] += dp[k];
                    mini = min(mini, k - i * j);
                }
            minq = mini, maxq = maxi;
        }
    if (x >= -BASE && x <= BASE)
        out << dp[BASE + x] % MOD;
    else
        out << 0;

    in.close();
    out.close(); 
    return 0;
}