Cod sursa(job #1659881)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 22 martie 2016 17:58:37
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>
const int V=44100;
const int MOD=10000;
const int N=20;
int ki[2*V+N];
int k1[2*V+N];
int ob[N*N*2+N];
int n,m,x;
void upd(int&x){
    if(x>MOD)
        x-=MOD;
}
int modul(int x){
    if(x<0)
        return -x;
    return x;
}
int main(){
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    scanf("%d%d%d",&n,&m,&x);
    if(modul(x)>V){
        printf("0");
        return 0;
    }
    int k=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            ob[++k]=i*j;
    ki[V]=1;
    for(int i=1;i<=k;i++){
        for(int j=0;j<2*V+N;j++)
            k1[j]=ki[j];
        for(int j=0;j<2*V+N;j++){
            if(j+ob[i]<2*V+N){
                ki[j+ob[i]]+=k1[j];
                upd(ki[j+ob[i]]);
            }
            if(j-ob[i]>=0){
                ki[j-ob[i]]+=k1[j];
                upd(ki[j-ob[i]]);
            }
        }
    }
    printf("%d",ki[V+x]);
    return 0;
}