Cod sursa(job #1276949)

Utilizator Master011Dragos Martac Master011 Data 26 noiembrie 2014 23:56:28
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<cstdio>
using namespace std;

FILE *in = fopen("diamant.in","r");
FILE *out = fopen("diamant.out","w");
const int Lm = 80205;
const int MOD = 10000;
int v[Lm*2];
int fr[Lm*2];

int main (){
    int n,m,x; fscanf(in,"%d%d%d",&n,&m,&x);
    v[Lm]=1;
    int st=Lm,dr=Lm,add,st1,dr1;
    if(x>Lm){
        fprintf(out,"0\n");
        return 0;
    }
    for(int i = 1 ; i <= n ; i++)
        for(int j = 1 ; j <= m ; j++){
            add=i*j;st1=st;dr1=dr;
            for(int k = st ; k <= dr ; k++){
                if(v[k]){
                    fr[k+add]+=v[k]; dr1=dr1>k+add?dr1:k+add;
                    fr[k-add]+=v[k]; st1=st1<k-add?st1:k-add;
                }
            }
            st=st1;dr=dr1;
            for(int k = st ; k <= dr ; k++){
                /*if(v[k]){
                    fprintf(out,"%d %d %d %d\n",k-Lm,v[k],i,j);
                }*/
                if(fr[k]){
                    v[k]+=fr[k];
                    v[k]%=MOD;
                    fr[k]=0;
                }
            }
        }
    fprintf(out,"%d\n",v[x+Lm]);
    return 0;
}