Cod sursa(job #1869562)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 5 februarie 2017 22:43:07
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");

const int SMax = 44101;
const int mod = 10000;

int n,m,x,s;
int V[SMax];
int mem[3][SMax * 2 + 3];

void add(int &x, int y){
    x += y;
    if(x > mod)
        x -= mod;
}
int main()
{
    f >> n >> m >> x;
    mem[1][-1 + SMax] = 1;
    mem[1][0 + SMax] = 1;
    mem[1][1 + SMax] = 1;

    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            if(i == 1 && j == 1)
                continue;
            for(int s = 0; s <= 2 * SMax; ++s){
                if(s - i * j >= 0)
                    add(mem[2][s],mem[1][s - i * j]);
                if(s + i * j <= 2 * SMax)
                    add(mem[2][s],mem[1][s + i * j]);
                add(mem[2][s],mem[1][s]);
            }
            for(int s = 0; s <= 2 * SMax; ++s){
                mem[1][s] = mem[2][s];
                mem[2][s] = 0;
            }
        }
    }
    if(x > SMax || x < -SMax){
        g << 0 << '\n';
        return 0;
    }
    g << mem[1][x + SMax] << '\n';
    return 0;
}