Cod sursa(job #923398)

Utilizator alexclpAlexandru Clapa alexclp Data 23 martie 2013 14:23:17
Problema Diamant Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>

using namespace std;

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

const int MOD = 10000;

int n, m, x;
int aux[44101], *nr;
int v[450];
int ad[44101], *pplus;
int sc[44101], *mminus;

int main()
{
    in >> n >> m >> x;
    nr = aux + 22050;
    pplus = ad + 22050;
    mminus = sc + 22050;
    int u = 0;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            v[++u] = i * j;
        }
    }

    int st = 0, dr = 0;
    nr[0] = 1;
    for (int i = 1; i <= n*m; i++) {
        for (int j = dr; j >= st; j  --) {
            pplus[j + v[i]] = nr[j];
        }
        for (int j = st; j <= dr; j++) {
            mminus[j - v[i]] = nr[j];
        }
        st -= v[i];
        dr += v[i];
        for (int j = st; j <= dr; j++) {
            nr[j] += (pplus[j] + mminus[j]) % MOD;
            nr[j] %= MOD;
            pplus[j] = mminus[j] = 0;
        }
    }

    out << nr[x] << "\n";

    return 0;
}