Cod sursa(job #7412)

Utilizator blasterzMircea Dima blasterz Data 21 ianuarie 2007 15:15:31
Problema 1-sir Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <string>
#define maxn 100
#define maxt maxn*maxn/2
int a[2*maxn*maxn+1][2*maxn+1], b[2*maxn*maxn+1][2*maxn+1];
int n, s;
int r=32640;
int p=256;
void citire()
{
	freopen("1-sir.in", "r", stdin);
	scanf("%d %d", &n, &s);
	r=n*n/2+1;
	p=n+1;
}

void calcul()
{
	int i, j, k;
	for(i=0;i<maxn*maxn;i++)
		for(j=0;j<2*maxn-1;j++) a[i][j]=b[i][j]=0;
	a[1+maxt][1+maxn]=1;
	a[-1+maxt][-1+maxn]=1;

	//printf("%d\n", a[1+maxt][1+maxn]);
	for(i=3;i<=n;i++)
	{
		int y=i*i/2;
		int z=-y;
	{	for(j=z;j<=y;j++)
		
			
			for(k=-i;k<=i;k++)
			{
				//printf("%d %d\n", j, k);
				b[j+maxt][k+maxn]=a[j-k+maxt][k-1+maxn]+a[j-k+maxt][k+1+maxn], b[j+maxt][k+maxn]%=194767;
				
			}				
}				
//			memcpy(a, b, sizeof(b));
		for(k=z;k<=y;k++)
				for(int t=-n;t<=n;t++) a[k+maxt][t+maxn]=b[k+maxt][t+maxn];
	
	
		
	}
		int sum=0;
	for(i=-n;i<=n;i++)sum+=a[s+maxt][i+maxn], sum%=194767;
	freopen("1-sir.out", "w", stdout);
	printf("%d\n", sum);
}

int main()
{
	citire();
	calcul();
	return 0;
}