Cod sursa(job #2098164)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 2 ianuarie 2018 14:52:06
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <stdlib.h>
#define xmax 88205
#define mod 10000
using namespace std;
fstream f1("diamant.in", ios::in);
fstream f2("diamant.out", ios::out);
int n, m, x, dp[2][xmax];
int main()
{
    int poz, i, j, val, T;
    f1>>n>>m>>x;
    if(abs(x)> (n*(n+1)/2)*(m*(m+1)/2)) f2<<0;
    else
    {
        T=(n*(n+1)/2)*(m*(m+1)/2);
        dp[0][T+1]=dp[0][T-1]=dp[0][T]=1;
        for(poz=1; poz<n*m; poz++)
        {
            i= 1+ poz/m;
            j= 1+ poz%m;

            for(val=-T; val<=T; val++)
            {
                dp[poz%2][T+val]= dp[1-poz%2][T+ val];

                if(val-i*j >=-T) dp[poz%2][T+val]+= dp[1-poz%2][T+val-i*j];
                dp[poz%2][T+val]%=mod;

                if(val+i*j <=T)  dp[poz%2][T+val]+= dp[1-poz%2][T+val+i*j];
                dp[poz%2][T+val]%=mod;
            }
        }
        f2<<dp[(n*m-1+2)%2][T+x];
    }
    return 0;
}