Cod sursa(job #1787732)

Utilizator liviu23Liviu Andrei liviu23 Data 24 octombrie 2016 22:32:23
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <string.h>
#define M 10000
#define SMAX 45000
using namespace std;

int n,m,x,aN[SMAX],aP[SMAX],bN[SMAX],bP[SMAX];

#define a(i) (((i)>=0)?(aP[(i)]):aN[-(i)])
#define b(i) (((i)>=0)?(bP[(i)]):bN[-(i)])

int main()
{
    ios_base::sync_with_stdio(false);
    ifstream fin("diamant.in");
    ofstream fout("diamant.out");
    int s=0;
    fin>>n>>m>>x;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
        s+=i*j;
    if(x<-s||x>s) {
        fout<<"0\n";
        return 0;
    }
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++) {
        memcpy(aN,bN,sizeof(bN));
        memcpy(aP,bP,sizeof(bP));
        for(int p=s;p>=-s;p--) {
            b(p)=a(p)+a(p+i*j)+a(p-i*j);
            b(p)%=M;
        }
        b(i*j)++;
        b(-i*j)++;
    }
    if(x==0)
        b(x)++;
    fout<<b(x);
    return 0;
}