Cod sursa(job #1659893)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 22 martie 2016 18:07:25
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
const int V=44100;
const int MOD=10000;
const int N=20;
int ki[2*V+N+1000];
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;
    int t=2*V+N+500;
    ki[V+500]=1;
    for(int i=1;i<=k;i++){
        for(int j=500;j<t;j++)
            k1[j]=ki[j];
        for(int j=500;j<t;j++){
            ki[j+ob[i]]+=k1[j];
            upd(ki[j+ob[i]]);
            ki[j-ob[i]]+=k1[j];
            upd(ki[j-ob[i]]);
        }
    }
    printf("%d",ki[V+x+500]);
    return 0;
}