Cod sursa(job #1787683)

Utilizator liviu23Liviu Andrei liviu23 Data 24 octombrie 2016 21:49:35
Problema Diamant Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <fstream>
#define DIM 405
#define M 10000
#define SMAX 90000
using namespace std;

int n,m,x,a[SMAX],b[SMAX],obj[DIM];

int main()
{
    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++) {
        obj[++obj[0]]=i*j;
        s+=i*j;
    }
    if(x<-s||x>s) {
        fout<<"0";
        return 0;
    }
    for(int i=1;i<=obj[0];i++) {
        for(int j=2*s;j>=obj[i];j--)
            b[j]=(a[j]%M+a[j-obj[i]]%M+a[j+obj[i]]%M)%M;
        for(int j=obj[i]-1;j>=0;j--)
            b[j]=a[j]%M;
        b[obj[i]+s]=(b[obj[i]+s]+1)%M;
        b[-obj[i]+s]=(b[-obj[i]+s]+1)%M;
        for(int i=0;i<=2*s;i++)
            a[i]=b[i],b[i]=0;
    }
    fout<<a[x+s];
    return 0;
}