Cod sursa(job #1550970)

Utilizator TimoteiCopaciu Timotei Timotei Data 14 decembrie 2015 23:31:18
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream>
#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;
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;
    int P = N * M;

    for(int i = N; i>= 1; i--)
        for(int j = M; j >= 1; j--)
    {
        v[(i - 1) * M + j + P] = i * j;
        D++;
        v[D] = -( i * j);
        sMax+= i * j;
    }


     dp[1][0] = 1;

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

         if(dp[1][j] != 0 ){
            dp[2][j + v[i]]+= dp[1][j];
            dp[2][j + v[i]]%= mod;
         }
     }
       }
         adun();
         X = abs(X);
         if(X > sMax) g << 0;
         else g << dp[1][X];

  return 0;
}