Cod sursa(job #2591936)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 31 martie 2020 18:18:57
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>

using namespace std;

int n,m,x,s,din[2][100001],t,s2,mod=10000,y;

int invers(int val)
{
    if(val<0)
    {
        return 45000-val;
    }
    else
    {
        return val;
    }
}

int main()
{
    ifstream fin("diamant.in");
    ofstream fout("diamant.out");
    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;
    }
    else
    {
        t=1;
        din[0][0]=1;
        s2=0;
        for (int i=1; i<=n; ++i)
        {
            for (int j=1; j<=m; ++j)
            {
                s2+=i*j;
                int val = s - s2;
                int mi = max(x - val,-s2);
                int ma = min(x + val,s2);
                for (int k=mi; k<=ma; ++k)
                {
                    y=invers(k);
                    din[t][y]=din[1-t][y];
                    if(k-i*j>=-s)
                    {
                        din[t][y]=(din[t][y]+din[1-t][invers(k-i*j)])%mod;
                    }
                    if(k+i*j<=s)
                    {
                        din[t][y]=(din[t][y]+din[1-t][invers(k+i*j)])%mod;
                    }
                }
                t=1-t;
            }
        }
        fout<<din[1-t][invers(x)];
    }
}