Cod sursa(job #1311238)

Utilizator robert_fanrRobert Banu robert_fanr Data 7 ianuarie 2015 21:22:25
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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;
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;
        }

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


    for(int p = 2; p<=m*n; p++){
        for(int k = -OFFSET + v[p];k<=OFFSET - v[p];k++){
                d[p][k + OFFSET] += d[p-1][k + OFFSET - v[p]];
                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;
        }
        for(int k = -OFFSET; k<= -OFFSET + v[p];k++){
                d[p][k + OFFSET] += d[p-1][k + OFFSET];
                d[p][k+OFFSET]%=MOD;
        }
        for(int k = OFFSET - v[p]; k<= OFFSET;k++){
                d[p][k + OFFSET] += d[p-1][k + OFFSET];
                d[p][k+OFFSET]%=MOD;
        }
    }

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