Pagini recente » Cod sursa (job #802770) | Cod sursa (job #114271) | Cod sursa (job #2781715) | Cod sursa (job #2405674) | Cod sursa (job #784762)
Cod sursa(job #784762)
/* Eu sunt BredPit :D */
#include <stdio.h>
#include <string.h>
#define LMax 70001
const char IN[]="1-sir.in",OUT[]="1-sir.out";
const int mod = 194767 , zero = 33000;
int N,S,Rez;
int T[2][LMax];
int abs(int x){
return x<0 ? x : 0;
}
void make(int N)
{
int p,i,j,l,s;
l=s=zero;
T[0][zero]=1;
for (i=p=1;i<=N;++i,p^=1)
{
//memset(T[p],0,sizeof(T[p]));
for (j=max(0,l-1);j<=s+1;++j) T[p][j]=0;
for (j=l;j<=s;++j)
T[p][j-i]=(T[p][j-i]+T[p^1][j])%mod,
T[p][j+i]=(T[p][j+i]+T[p^1][j])%mod;
l-=i;s+=i;
}
if (p==0)
memcpy(T[0],T[1],sizeof(T[0]));
}
int main()
{
int i;
freopen(IN,"r",stdin);
scanf("%d%d",&N,&S);
fclose(stdin);
if (abs(S)<=70000) make(N-1);
/*for (i=(2*S-N*(N-1))/(2*N);i<=(N*(N-1)-2*S)/(2*N);++i)
Rez=(Rez+T[0][zero+S-i*N])%mod;*/
freopen(OUT,"w",stdout);
printf("%d\n",abs(S)<=70000 ? T[0][zero+S] : 0);
fclose(stdout);
return 0;
}