Cod sursa(job #1219101)

Utilizator MaarcellKurt Godel Maarcell Data 13 august 2014 14:07:01
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <iostream>
#define XMAX 80200
using namespace std;


int N,M,X,sum, a[2][XMAX*2];
bool l;

int main(){
    ifstream in("diamant.in");
    ofstream out("diamant.out");
    in >> N >> M >> X;

    sum = N*M*(N*M+1)/2;
    if (X>sum || X<-sum){
        out << 0;
        return 0;
    }

    a[0][XMAX]=a[0][XMAX+1]=a[0][XMAX-1]=1;

    int i,j,k;
    for (j=2; j<=M; j++){
        l=!l;
        for (k=-sum; k<=sum; k++){

            a[l][XMAX+k]=a[!l][XMAX+k];
            a[l][XMAX+k]+=a[!l][XMAX+k-j];
            a[l][XMAX+k]+=a[!l][XMAX+k+j];
        }
    }

    for (i=2; i<=N; i++)
        for (j=1; j<=M; j++){
            l=!l;
            for (k=-sum; k<=sum; k++){
                    a[l][XMAX+k]=a[!l][XMAX+k];
                    a[l][XMAX+k]+=a[!l][XMAX+k-i*j];
                    a[l][XMAX+k]+=a[!l][XMAX+k+i*j];
            }
        }

    out << a[l][XMAX+X];
    return 0;
}