Cod sursa(job #3185175)

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

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

int modalitati[2][88201];
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][44100] = 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 + 44100] = modalitati[0][suma + 44100];
                    if (-limita <= suma - termen) { (modalitati[1][suma + 44100] += modalitati[0][suma - termen + 44100]) %= mod; }
                    if (suma + termen <= limita) { (modalitati[1][suma + 44100] += modalitati[0][suma + termen + 44100]) %= mod; }
                }

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

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

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