Cod sursa(job #3186755)

Utilizator SSKMFSS KMF SSKMF Data 25 decembrie 2023 07:56:10
Problema 1-sir Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
using namespace std;

ifstream cin ("1-sir.in");
ofstream cout ("1-sir.out");

const int mod = 194767;
int modalitati[2][65281];

int main ()
{
    int lungime , suma;
    cin >> lungime >> suma;

    if (!(-((lungime * (lungime - 1)) >> 1) <= suma && suma <= ((lungime * (lungime - 1)) >> 1)))
        { cout << '0'; }
    else
    {
        modalitati[0][32640] = 1;
        for (int lungime_actuala = 2 ; lungime_actuala <= lungime ; lungime_actuala++)
        {
            for (int indice = 32640 - ((lungime_actuala * (lungime_actuala - 1)) >> 1) , limita = 32640 + ((lungime_actuala * (lungime_actuala - 1)) >> 1) ; indice <= limita ; indice++)
            {
                modalitati[1][indice] = 0;
                if (lungime_actuala - 1 <= indice) { modalitati[1][indice] += modalitati[0][indice - lungime_actuala + 1]; }
                if (indice + lungime_actuala - 1 <= limita) { modalitati[1][indice] += modalitati[0][indice + lungime_actuala - 1]; }

                if (modalitati[1][indice] >= mod)
                    { modalitati[1][indice] -= mod; }
            }

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

        cout << modalitati[0][suma + 32640];
    }

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