Pagini recente » Cod sursa (job #566600) | Cod sursa (job #381455) | Cod sursa (job #921003) | Cod sursa (job #2943536) | Cod sursa (job #7266)
Cod sursa(job #7266)
# include <stdio.h>
# include <string.h>
# define _fin "1-sir.in"
# define _fout "1-sir.out"
# define maxn 515
# define addn 257
# define maxs 66000
# define adds 33000
# define mod 194767
int n, s, sol;
int ways[2][maxn][maxs];
/*
ways[...][ k ][ suma ] = numarul de moduri de a calcula
*/
void readf()
{
freopen(_fin, "r", stdin);
scanf("%d %d", &n, &s);
}
void solve()
{
int i, j, k, crt=0, maxsum;
ways[crt][0+addn][0+adds] = 1;
for (i=2; i<=n; i++)
{
crt=!crt;
maxsum = (i*(i-1))>>1;
for (j=-(i-1); j<i; j+=2)
{
// venind de la j-1
for (k=-maxsum; k<=maxsum; k+=2)
{
ways[crt][ j+addn ][ k+adds ] = ways[ !crt ][ j+1+addn ][ k-j+adds ]+
ways[ !crt ][ j-1+addn ][ k-j+adds ];
if ( ways[crt][ j+addn ][ k+adds ] > mod )
ways[crt][ j+addn ][ k+adds ] -= mod;
}
for (k=-maxsum+1; k<maxsum; k+=2)
ways[crt][ j+addn ][ k+adds ] = 0;
}
}
for (j=-n; j<=n; j++)
sol = (sol+ways[ crt ][ j+addn ][ s+adds ]) % mod;
}
void writef()
{
freopen(_fout, "w", stdout);
printf("%d\n", sol);
}
int main()
{
readf();
solve();
writef();
return 0;
}