Cod sursa(job #871414)

Utilizator danalex97Dan H Alexandru danalex97 Data 4 februarie 2013 19:55:36
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
using namespace std;

const int Nmax = 45000;
const int Mod  = 10000;

int N,M,K;
int Sum;

int Poz[2][Nmax];
int Neg[2][Nmax];

#define A(i,j) ( j < 0 ? Neg[i][-(j)] : Poz[i][(j)] )

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

int main()
{
    F>>N>>M>>K;
    for (int i=1;i<=N;++i)
        for (int j=1;j<=M;++j)
            Sum += i * j;

    if ( Sum < max(K,-K) )
    {
        G<<"0\n";
        return 0;
    }

    bool step = 1;
    A(0,0) = 1;

    for (int i=1;i<=N;++i)
        for (int j=1;j<=M;++j,step^=1)
        {
            bool last = step ^ 1;
            int Stop = -Sum-1;
            int X=i*j;
            for (int k=Sum;k>Stop;--k)
            {
                A(step,k) = A(last,k-X) + A(last,k) + A(last,k+X);
                A(step,k) %= Mod;
            }
        }

    G<<A( step^1 , K );
}