Cod sursa(job #1550999)

Utilizator TimoteiCopaciu Timotei Timotei Data 15 decembrie 2015 00:29:08
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#include<iostream>
#include <cmath>
#define mod 10000
using namespace std;

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

int N, M ,X, D, v[805], dp[3][44105], sMax, val;
void adun()
{
    dp[1][0] = dp[2][0];
    for(int i = 1; i <= sMax; i++){
        dp[1][i]+= dp[2][i];
        dp[1][i]%= mod;
    }

}
void afisez()
{
    for(int i = 0; i <= sMax; i++) g << dp[1][i] << " ";
    g << "\n";
    for(int i = 0; i <= sMax; i++) g << dp[2][i] << " ";
    g << "\n";
}
int main()
{
    f >> N >> M >> X;
    sMax = ((N *(N + 1))/2) * ((M *(M + 1))/2);
     dp[1][0] = 1;

     for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++){
            val = i * j;
        for(int j = sMax - val; j >= 0; j--)
     {
              if(dp[1][j] != 0 ){
            dp[1][j + val] += dp[1][j];
             dp[1][j + val]%= mod;
         }
     }
         val = (N - i + 1) * (M - j + 1);
       for(int j = val; j <= sMax; j++)
    {

            dp[2][j - val]+= dp[1][j];
            dp[2][j - val]%= mod;

     }



       }
       adun();

         X = abs(X);
         if(X > sMax) g << 0;
         else g << dp[1][X];

  return 0;
}