Cod sursa(job #1415800)

Utilizator Athena99Anghel Anca Athena99 Data 6 aprilie 2015 12:52:30
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>

using namespace std;

ifstream fin("diamant.in");
ofstream fout("diamant.out");

const int mod= 10000;
const int smax= 44200;

int d[2*smax], aux[2*smax];

int main(  ) {
    int n, m, x, sum= 0;
    fin>>n>>m>>x;
    for ( int i= 1; i<=n; ++i ) {
        for ( int j= 1; j<=m; ++j ) {
            sum+= i*j;
        }
    }

    int sol= 0, news= 0;
    if ( (x>=0 && x>sum) || (x<=0 && x<-sum) ) {
        sol= 0;
    } else {
        d[sum]= 1;
        for ( int i= 1; i<=n; ++i ) {
            for ( int j= 1, nr; j<=m; ++j ) {
                nr= i*j; news+= nr;

                for ( int cnt= sum+news; cnt>=sum-news; --cnt ) {
                    if ( d[cnt]>0 && cnt+nr<=2*sum ) {
                        d[cnt+nr]= (d[cnt+nr]+d[cnt])%mod;
                    }
                    aux[cnt]= d[cnt];
                }
                for ( int cnt= sum-news; cnt<=sum+news; ++cnt ) {
                    if ( aux[cnt]>0 && cnt-nr>=0 ) {
                        d[cnt-nr]= (d[cnt-nr]+aux[cnt])%mod;
                    }
                }
            }
        }

        sol= d[x+sum];
    }

    fout<<sol<<"\n";

    return 0;
}