Cod sursa(job #967094)

Utilizator romircea2010FMI Trifan Mircea Mihai romircea2010 Data 27 iunie 2013 01:52:00
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#define MOD 10000

using namespace std;

int n, m, X, p, q, maxval;
int dp[2][45600];

inline void Read()
{
    ifstream f ("diamant.in");
    f>>n>>m>>X;
    f.close();
    maxval = (n*(n+1)*m*(m+1))/2/2;
}

inline int Abs (int x)
{
    return x>0?x:-x;
}

inline void Solve()
{
    dp[0][0] = 1;
    int i, j, k;
    p = 1;
    q = 0;
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            for (k=0; k<=maxval; k++)
            {
                dp[p][k] = dp[q][k] + dp[q][k+i*j] + dp[q][Abs(k-i*j)];
                dp[p][k] %= MOD;
            }
            q = p;
            p = 1-p;
        }
    }
}

inline void Write()
{
    ofstream g("diamant.out");
    g<<dp[q][Abs(X)]<<"\n";
    g.close();
}

int main()
{
    Read();
    if (maxval < Abs(X))
    {
        ofstream g("diamant.out");
        g<<"0\n";
        g.close();
        return 0;
    }
    Solve();
    Write();
    return 0;
}