Pagini recente » Cod sursa (job #2759147) | Cod sursa (job #1149251) | Cod sursa (job #2439483) | Cod sursa (job #2868504) | Cod sursa (job #7211)
Cod sursa(job #7211)
#include <stdio.h>
#include <string.h>
#define MaxS 70000
#define MaxN 521
int N, S;
const int SHIFT = 33000;
const int shift = 260;
int A[2][MaxS][MaxN];
int mat[MaxS][MaxN];
int lc = 1, lp = 0;
int main()
{
int i, j, k;
FILE *fin = fopen("1-sir.in", "rt");
fscanf(fin, "%d %d", &N, &S);
fclose(fin);
A[0][SHIFT][shift] = 1;
for (i = 2; i <= N; i++, lc = !lc, lp = !lp)
{
//memset(A[lc], 0, sizeof(A[lc]));
for (j = SHIFT-(i*(i+1))/2; j <= SHIFT+(i*(i+1))/2; j++)
for (k = -N+1; k < N; k++)
{
int x = k + 1;
if (mat[j+x][shift+x] != i) A[lc][j+x][shift+x] = 0, mat[j+x][shift+x] = i;
A[lc][j+x][shift+x] += A[lp][j][shift+k];
A[lc][j+x][shift+x] %= 194767;
x = k - 1;
if (mat[j+x][shift+x] != i) A[lc][j+x][shift+x] = 0, mat[j+x][shift+x] = i;
A[lc][j+x][shift+x] += A[lp][j][shift+k];
A[lc][j+x][shift+x] %= 194767;
}
}
int Val_fin = 0;
for (i = -N; i <= N; i++)
Val_fin += A[lp][SHIFT+S][shift+i];
FILE *fout = fopen("1-sir.out", "wt");
fprintf(fout, "%d", Val_fin);
fclose(fout);
return 0;
}