Cod sursa(job #1308485)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 4 ianuarie 2015 08:58:51
Problema Diamant Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>
#define MOD 10000
#define MAXX 44100
#define LIM 88200
#define MAXK 400
int d[2][LIM+1], v[MAXK];
int main(){
    int n, m, x, k, i, j;
    FILE *fin, *fout;
    fin=fopen("diamant.in", "r");
    fout=fopen("diamant.out", "w");
    fscanf(fin, "%d%d%d", &n, &m, &x);
    if(x>MAXX){
        fprintf(fout, "0\n");
    }else{
        k=0;
        for(i=1; i<=n; i++){
            for(j=1; j<=m; j++){
                v[k++]=i*j;
            }
        }
        d[1][MAXX]=1;
        for(i=0; i<k; i++){
            for(j=0; j<=LIM; j++){
                d[i&1][j]=d[(i+1)&1][j];
                if(j+v[i]<=LIM){
                    d[i&1][j]+=d[(i+1)&1][j+v[i]];
                }
                if(j-v[i]>=0){
                    d[i&1][j]+=d[(i+1)&1][j-v[i]];
                }
                d[i&1][j]%=MOD;
            }
        }
        fprintf(fout, "%d\n", d[(k-1)&1][x+MAXX]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}