Cod sursa(job #1552360)

Utilizator TimoteiCopaciu Timotei Timotei Data 17 decembrie 2015 20:15:17
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 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;
    }

}
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 k = sMax - val; k >= 0; k--)
     {
            dp[1][k + val] += dp[1][k];
             dp[1][k + val]%= mod;
     }
        }

        for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++){
                val= i * j;
        for(int k = val; k <= sMax - val; k++)
    {
            dp[2][k - val]+= dp[1][k];
            dp[2][k - val]%= mod;

     }
        }
         adun();

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

  return 0;
}