Cod sursa(job #1334379)

Utilizator LegionHagiu Stefan Legion Data 4 februarie 2015 12:21:25
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <fstream>
using namespace std;
int numereunu[100001],numeredoi[100001];
int main()
{
    ifstream in("diamant.in");
    ofstream out("diamant.out");
    int i,j,n,m,x,minim=50000,maxim=50000,k,val;
    bool contor=false;
    in>>n;
    in>>m;
    in>>x;
    x+=50000;
    if (x>100000){out<<"0";return 0;}
    if (x<0){out<<"0";return 0;}
    numereunu[50000]++;
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            val=i*j;
            if (contor==false)
            {
                contor=true;
                for (k=minim-val;k<=maxim+val;k++)
                {
                    numeredoi[k]=0;
                }
                for (k=minim;k<=maxim;k++)
                {
                    numeredoi[k]+=numereunu[k];
                    numeredoi[k-val]+=numereunu[k];
                    numeredoi[k+val]+=numereunu[k];
                }
                minim-=val;
                maxim+=val;
            }
            else
            {
                contor=false;
                for (k=minim-val;k<=maxim+val;k++)
                {
                    numereunu[k]=0;
                }
                for (k=minim;k<=maxim;k++)
                {
                    numereunu[k]+=numeredoi[k];
                    numereunu[k-val]+=numeredoi[k];
                    numereunu[k+val]+=numeredoi[k];
                }
                minim-=val;
                maxim+=val;
            }
        }
    }
    out<<max(numereunu[x],numeredoi[x])%10000;
}