Cod sursa(job #3185180)

Utilizator SSKMFSS KMF SSKMF Data 18 decembrie 2023 11:05:53
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
using namespace std;

ifstream cin ("diamant.in");
ofstream cout ("diamant.out");

int temporar[2][88201] , *modalitati[2] = {temporar[0] + 44100 , temporar[1] + 44100};
const int mod = 10000;

int main ()
{
    int linii , coloane , valoare;
    cin >> linii >> coloane >> valoare;

    if (valoare < -linii * (linii + 1) / 2 * coloane * (coloane + 1) / 2 || linii * (linii + 1) / 2 * coloane * (coloane + 1) / 2 < valoare)
        { cout << '0'; }
    else
    {
        modalitati[0][0] = 1;
        for (int linie = 1 , limita = 0 ; linie <= linii ; linie++) {
            for (int coloana = 1 ; coloana <= coloane ; coloana++) 
            {
                const int termen = linie * coloana; limita += termen;
                for (int suma = -limita ; suma <= limita ; suma++) {
                    modalitati[1][suma] = modalitati[0][suma];
                    if (-limita <= suma - termen) { if ((modalitati[1][suma] += modalitati[0][suma - termen]) >= mod) { modalitati[1][suma] -= mod; } }
                    if (suma + termen <= limita) { if((modalitati[1][suma] += modalitati[0][suma + termen]) >= mod) { modalitati[1][suma] -= mod; } }
                }

                swap(modalitati[0] , modalitati[1]);
            }
        }

        cout << modalitati[0][valoare];
    }

    cout.close(); cin.close();
    return 0;
}