Cod sursa(job #1744634)

Utilizator oldatlantianSerban Cercelescu oldatlantian Data 20 august 2016 01:34:55
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
///Te-am luat, Nrx!
#include <bits/stdc++.h>
using namespace std;

const int KMAX = 45000,
           MOD = 10000;

int n, m, x;
int _ant[KMAX*2],
    _tmp[KMAX*2];


int main(void) {
    freopen("diamant.in",  "r", stdin);
    freopen("diamant.out", "w", stdout);
    int *ant = _ant + KMAX,
        *tmp = _tmp + KMAX;
    int chg;

    scanf("%d%d%d",&n,&m,&x);

    if(x>=KMAX || -x>=KMAX) {
        printf("0\n");
    }
    else {
        ant[0] = 1;
        tmp[0] = 1;

        for(int i=1; i<=n; ++i) {
        for(int j=1; j<=m; ++j) {
            memset(_tmp, 0x00, sizeof(tmp));

            chg = i * j;

            for(int k=1-KMAX; k<KMAX-1;  ++k) {
                if(ant[k]) {
                    tmp[k-chg] = (tmp[k-chg] + ant[k]) % MOD;
                    tmp[k+chg] = (tmp[k+chg] + ant[k]) % MOD;
                }
            }

            for(int k=1-KMAX; k<KMAX-1;  ++k)
                ant[k] = tmp[k];
        }}

        printf("%d\n",ant[x]);
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}