Cod sursa(job #1194331)

Utilizator stanescu.raduRadu Stanescu stanescu.radu Data 3 iunie 2014 15:46:37
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <iostream>
#define MOD 10000
#define MAX_N 45105
  
using namespace std;
  
ifstream f ("diamant.in");
ofstream g ("diamant.out");
  
int n, m, x, suma;
int dp[2][2 * MAX_N];
  
int abs (int x)
{
    if (x > 0) return x;
    return -x;
}
  
void read ()
{
    f >> n >> m >> x;
}
  
void solve ()
{
    suma = (n * (n + 1) * m * (m + 1)) / 2 / 2;
    if (abs(x) > suma)
    {
        g << 0;
        return ;
    }
  
    dp[0][0] = 1;
    int l = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++, l = 1 - l)
            for (int k = 0; k <= suma; k++)
            {
                dp[1 - l][k] = dp[l][k] + dp[l][k + i * j] + dp[l][abs(k - i * j)];
                if (dp[1 - l][k] >= MOD)
                    dp[1 - l][k] -= MOD;
            }
      
    g << dp[l][abs(x)];
    f.close();
    g.close();
}
  
int main ()
{
    read ();
    solve ();
    return 0;
}