Cod sursa(job #48854)

Utilizator cos_minBondane Cosmin cos_min Data 5 aprilie 2007 09:47:14
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <stdio.h>
#include <fstream>
#include <vector>
#include <map>
using namespace std;

#define in "diamant.in"
#define out "diamant.out"
#define dim 44101

vector<int> V;
int A[2][2*dim+1], C[dim]; // A[i] = numarul de a forma i
int P[2*dim+1], Nr[2][2*dim+1];
int N, M, X, Y;
 
int main()
{
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d%d%d", &N, &M, &X);
    
    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= M; j++ )
        {
            V.push_back(i*j), V.push_back(2*i*j);
        }    
    
     if ( X > 0 ) Y = X;
     else         Y = -X;
    
    A[0][0] = 1;
    
    for ( int i = 0; i < V.size(); i++ ) 
    {
        for ( int j = 0; j <= 2*Y; j++ )
        {
            if ( A[0][j] == 1 )
            {
                A[1][j+V[i]] = 1;
                Nr[1][j+V[i]] = ( Nr[1][j+V[i]] + 1) % 10000;
            }    
        }   
        
        for ( int k = 1; k <= 2*Y; k++ )
        {
            if ( A[1][k] == 1 ) 
            {
                A[0][k] = A[1][k];
                Nr[0][k] = Nr[1][k]  % 10000;
            }    
        }     
    }  
    
   /* for ( int i = 0; i <= 1; i++, printf("\n") )
        for ( int j = 0; j <= 2*Y; j++ )
           printf("%d ", A[i][j] );*/
                   
    if ( X > 0 ) printf("%d", Nr[1][2*X] % 10000 );
    else         printf("%d", Nr[1][Y] % 10000 );   
}