Cod sursa(job #1759650)

Utilizator topala.andreiTopala Andrei topala.andrei Data 19 septembrie 2016 17:50:12
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");
const int lim=45000;
const int maxn=401;
const int modulo=10000;
int N,M,G;
int v[maxn],R[2*lim],p[2*lim],m[2*lim];
#define R (R+lim)
#define p (p+lim)
#define m (m+lim)
int main()
{
    int k=0,s=0,i,j;
    f>>N>>M>>G;
    for (i=1;i<=N;i++)
        for (j=1;j<=M;j++)
            {v[++k]=i*j;s+=i*j;}

    if (G>s||G<-s) {g<<0;return 0;}
    R[0]=1;
    for (i=1;i<=k;i++)
    {
        for (j=-s;j<=s;j++)
            if (R[j]!=0)
            {
                p[j+v[i]]+=R[j];
                m[j-v[i]]+=R[j];
            }
        for (j=-s;j<=s;j++)
        {
            R[j]=(R[j]+p[j]+m[j])%modulo;
            p[j]=0;
            m[j]=0;
        }
    }
    g<<R[G];
}