Cod sursa(job #694726)

Utilizator BredPitBred Pit BredPit Data 27 februarie 2012 23:06:00
Problema 1-sir Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>
#include <string.h>
#define LMax 75001

const char IN[]="1-sir.in",OUT[]="1-sir.out";
const int mod =  194767 , zero = 37500;

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)
	{
		fprintf(stderr,"%d\r",i);
		memset(T[p],0,sizeof(T[p]));
		//for (j=0;j<LMax;++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;
}