Cod sursa(job #1219106)

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


int N,M,X,sum,aux, 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;
    aux=1;

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

            a[l][XMAX+k]=a[!l][XMAX+k] % mod;
            a[l][XMAX+k]=(a[l][XMAX+k]+a[!l][XMAX+k-j]) % mod;
            a[l][XMAX+k]=(a[l][XMAX+k]+a[!l][XMAX+k+j]) % mod;
        }
    }

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

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