Cod sursa(job #1311293)

Utilizator robert_fanrRobert Banu robert_fanr Data 7 ianuarie 2015 22:23:45
Problema Diamant Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>

using namespace std;

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

const int MAXX = 44100;
const int MOD = 10000;
int n , m , x, OFFSET, LIMIT;
short int d[441][2 * MAXX + 1];
int v[441];

int main()
{
    in >> n >> m >> x;
    int p=1;
    for (int i = 1 ; i<=n; i++)
        for(int j = 1; j<=m; j++){
            v[p++]=i*j;
            OFFSET += i*j;
        }
    LIMIT = OFFSET;

    if (x> LIMIT || x<-LIMIT){
        out << 0;
        return 0;
    }

    d[1][OFFSET + 1]=d[1][OFFSET - 1]=d[1][OFFSET] = 1;


    for(int p = 2; p<=m*n; p++){
        for(int k = -LIMIT; k<= LIMIT; k++){
                if (k - v[p] >= -LIMIT)
                    d[p][k + OFFSET] += d[p-1][k + OFFSET - v[p]];
                if (k + v[p] <= LIMIT)
                    d[p][k + OFFSET] += d[p-1][k + OFFSET + v[p]];
                d[p][k + OFFSET] += d[p-1][k + OFFSET];
                d[p][k+OFFSET]%=MOD;
        }
    }

    out << d[n*m][x + OFFSET];
    return 0;
}