Cod sursa(job #2589810)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 26 martie 2020 21:56:29
Problema Diamant Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#include <vector>

#define NMAX 50001

using namespace std;

int d[2][NMAX * 3 + 4 ] ;

int main() {


  FILE *fin, *fout ;
  fin = fopen ("diamant.in", "r" ) ;
  fout = fopen ("diamant.out", "w" ) ;
  int s, i, j, n, m, X, t, k ;
  fscanf(fin, "%d%d%d", &n, &m, &X);
  s = 0 ;
  d[0][NMAX] = d[1][NMAX] = 1;
  for ( i = 1; i <= n; i++ )
    for ( j = 1; j <= m; j++ )
      s += i * j ;

  if ( s < X )
    fprintf ( fout, "0" ) ;
  else {
    s = 0 ;
    for ( i = 1 ; i <= n ; i++ ) {
      for ( j = 1 ; j <= m ; j++ ) {
        t = i * j ;
        s += t ;
        for ( k = s + NMAX; k >= -s + NMAX && k >= 0 ; k-- ) {
          if ( k - t > 0 )
            d[1][k] = ( d[1][k] + d[0][k-t]) % 10000 ;
          if ( k + t < 2 * NMAX )
            d[1][k] = ( d[1][k] + d[0][k+t] ) % 10000 ;
        }
        for ( k = 0; k <= 3 * NMAX ; k++ )
          d[0][k] = d[1][k] ;
      }
    }
    fprintf(fout, "%d", d[1][X+NMAX] % 10000 ) ;
  }
  return 0;
}