Cod sursa(job #1901353)

Utilizator trutruvasilicaHuhurez Marius trutruvasilica Data 3 martie 2017 21:28:57
Problema Diamant Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <cstdlib>
#include <cmath>
#include <cstring>
#define A(i) (((i)<0)?(An[-(i)]):(Ap[(i)]))
#define B(i) (((i)<0)?(Bn[-(i)]):(Bp[(i)]))
using namespace std;
ifstream fin("diamant.in");
ofstream fout("diamant.out");
int cost[1001];
int Ap[50000],An[50000],Bp[50000],Bn[50000];
const int mod=10000;
int main()
{
    int n,m,x,i,j;
    fin>>n>>m>>x;
    int rez=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            rez+=i*j;
            cost[(i-1)*n+j]=i*j;
        }
    }
    A(0)=1;
    int tot=n*m;
    for(i=1;i<=tot;i++)
    {
        memcpy(Bn,An,sizeof(An));
        memcpy(Bp,Ap,sizeof(Ap));
        for(j=-rez;j<=rez;j++)
        {
            A(j)=(B(j)+B(j-cost[i])+B(j+cost[i]))%mod;
        }
    }
    if(abs(x)>rez) fout<<0;
    else
    {
        fout<<A(x);
    }
}