Cod sursa(job #994665)

Utilizator harababurelPuscas Sergiu harababurel Data 5 septembrie 2013 23:31:28
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <fstream>
#define smax 55000
#define mod 10000
using namespace std;

int n, m, x, lower, upper;
short cur[2*smax], pre[2*smax];
#define cur (cur+smax)
#define pre (pre+smax)


int main() {
    ifstream f("diamant.in");
    ofstream g("diamant.out");

    f>>n>>m;
    f>>x;

    if(x > 44100 || x < -44100) {
        g<<"0\n";
        return 0;
    }

    lower = -1;
    upper = 1;
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=m; j++) {
            lower -= i*j;
            upper += i*j;

            for(int val=lower; val<=upper; val++)
                cur[val] = (pre[val] + pre[val-i*j] + pre[val+i*j])%mod;


            cur[i*j] = (cur[i*j] + 1) % mod;
            cur[-i*j] = (cur[-i*j] + 1) % mod;

            for(int val=lower; val<=upper; val++) pre[val] = cur[val];
        }
    }

    g<<cur[x]%mod<<"\n";



    return 0;
}