Cod sursa(job #6860)

Utilizator dominoMircea Pasoi domino Data 21 ianuarie 2007 03:40:19
Problema 1-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <string.h>

#define MAX_S 1<<16
#define FIN "1-sir.in"
#define FOUT "1-sir.out"
#define MOD 194767

int N, S, A[MAX_S], B[MAX_S];

int main(void)
{
    int i, j, X;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

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

    X = N*(N-1)/2;
    if (S < -X || S > X) { printf("0\n"); return 0; }

    S += X;
    A[X] = 1;
    for (i = 1; i < N; i++)
    {
        for (j = 2*X; j >= i; j--)
        {
            B[j] += A[j-i];
            if (B[j] >= MOD) B[j] -= MOD;
        }
        for (j = 0; j+i <= 2*X; j++)
        {
            B[j] += A[j+i];
            if (B[j] >= MOD) B[j] -= MOD;
        }
        memcpy(A, B, sizeof(B));
        memset(B, 0, sizeof(B));
    }

    printf("%d\n", A[S]);

    return 0;
}