Cod sursa(job #2018973)

Utilizator atatomirTatomir Alex atatomir Data 6 septembrie 2017 15:21:29
Problema 1-sir Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

#define mp make_pair
#define pb push_back
#define ll long long

#define mod 194767
#define maxN 311
#define sz (maxN * maxN)

int n, i, j, ss, dd;
int S;
int dp[2][2 * sz + 2];

int main()
{
    freopen("1-sir.in","r",stdin);
    freopen("1-sir.out","w",stdout);

    scanf("%d%d", &n, &S);

    ss = 0; dd = 1;
    dp[ss][sz] = 1;

    for (i = 1; i < n; i++) {
        memset(dp[dd], 0, sizeof(dp[dd]));

        for (j = -sz; j <= sz; j++) {
            if (dp[ss][sz + j] == 0) continue;

            dp[dd][sz + j + i] += dp[ss][sz + j];
            if (dp[dd][sz + j + i] >= mod) dp[dd][sz + j + i] -= mod;

            dp[dd][sz + j - i] += dp[ss][sz + j];
            if (dp[dd][sz + j - i] >= mod) dp[dd][sz + j - i] -= mod;
        }

        swap(ss, dd);
    }

    if (S < -sz || S > sz) {
        printf("0");
        return 0;
    }

    printf("%d", dp[ss][S + sz]);


    return 0;
}