Cod sursa(job #1800270)

Utilizator sergiunascaSergiu Nasca sergiunasca Data 7 noiembrie 2016 17:09:04
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 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 20
#define ADD_MORE 10

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;
    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 + ADD_MORE] = b[k + val + ADD_MORE] + a[k +ADD_MORE];
                b[k + ADD_MORE] = b[k + ADD_MORE] + a[k + ADD_MORE];
                b[k - val + ADD_MORE] = b[k - val + ADD_MORE] + a[k + ADD_MORE];
            }
            
            min = min - val;
            max = max + val;
            for(int k = min; k <= max; ++k)
            {
                a[k + ADD_MORE] = b[k + ADD_MORE] % 1000;
                b[k + ADD_MORE] = 0;
            }
        }
    }
    
    if(x < 0 || x > 200000)
    {
        printf("0\n");
        return 0;
    }
    
    printf("%d\n", a[x + ADD_MORE]);
    
    return 0;
}