Cod sursa(job #1800281)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 7 noiembrie 2016 17:13:57
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
//
//  main.cpp
//  Diamant
//
//  Created by Nasca Sergiu Alin on 07/11/2016.
//  Copyright © 2016 Nasca Sergiu Alin. All rights reserved.
//

#include <iostream>
#define D_MAX 200050
#define ADD_MORE 100000

using namespace std;

int a[D_MAX], b[D_MAX];
int main(int argc, const char * argv[])
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);
    
    int n, m, x, val = 0, min = 0, max = 0;
    scanf("%d %d %d", &n, &m, &x);
    
    a[ADD_MORE] = 1;min = ADD_MORE; max = ADD_MORE;
    for(int i = 1; i <= n; ++i)
    {
        for(int j = 1; j <= m; ++j)
        {
            val = i*j;
            for(int k = min; k <= max; ++k)
            {
                b[k + val] = (b[k + val] + a[k]) % 10000;
                b[k] = (b[k] + a[k]) % 10000;
                b[k - val] = (b[k - val] + a[k]) % 10000;
            }
            
            min = min - val;
            max = max + val;
            for(int k = min; k <= max; ++k)
            {
                a[k] = b[k] % 10000;
                b[k] = 0;
            }
        }
    }
    
    if(x < -100000 || x > 100000)
    {
        printf("0\n");
        return 0;
    }
    
    printf("%d\n", a[x + ADD_MORE] % 10000);
    
    return 0;
}