Pagini recente » Cod sursa (job #3261591) | Cod sursa (job #3182307) | Monitorul de evaluare | Cod sursa (job #328951) | Cod sursa (job #7750)
Cod sursa(job #7750)
#include <stdio.h>
#define infile "1-sir.in"
#define outfile "1-sir.out"
#define MOD 194767
#define DECALAJ 32700
FILE *fin,*fout;
int N,S;
int nr[2*32700][2];
void solve()
{
int i,j;
int min=-N*(N-1)/2;
int max=N*(N-1)/2;
int current,next;
int ok;
current=N%2;
for(i=min;i<=max;i++)
nr[i+DECALAJ][0]=nr[i+DECALAJ][1]=0;
nr[DECALAJ][current]=1;
for(j=N-1;j>0;j--)
{
current=j%2;
next=(j+1)%2;
for(i=min;i<=max;i++)
{
nr[i+DECALAJ][current]=0;
ok=1;
if(i+(N-j)>max)
ok=0;
if(ok)
nr[i+DECALAJ][current]+=nr[i+(N-j)+DECALAJ][next];
ok=1;
if(i-(N-j)<min)
ok=0;
if(ok)
nr[i+DECALAJ][current]+=nr[i-(N-j)+DECALAJ][next];
if(nr[i+DECALAJ][current]>=MOD)
nr[i+DECALAJ][current]-=MOD;
}
}
}
int main()
{
fin=fopen(infile,"r");
fscanf(fin,"%d %d",&N,&S);
fclose(fin);
if((S>N*(N-1)/2) || (S<-N*(N-1)/2))
{
fout=fopen(outfile,"w");
fprintf(fout,"0\n");
fclose(fout);
return 0;
}
solve();
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",nr[S+DECALAJ][1]);
fclose(fout);
return 0;
}