Cod sursa(job #542467)

Utilizator mathboyDragos-Alin Rotaru mathboy Data 26 februarie 2011 13:59:50
Problema Sortari2 Scor 100
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 0.98 kb
#include <cstdio>

#define maxN 1005
#define mod 999017

using namespace std;


int D[maxN][maxN], fib[maxN * 2], sol, i, px, py, j, N;
int main ()
{


	freopen ("sortari2.in", "r", stdin);
	freopen ("sortari2.out", "w", stdout);


	scanf ("%d\n", &N);


	D[4][1] = 1; D[4][2] = 1; D[4][3] = 4; D[4][4] = 5;
	sol = 11;

	fib[1] = 1;
	
	for (i = 2; i <= N * 2; i++) 
		fib[i] = (fib[i - 1] + fib[i - 2]) % mod;
	//for (i = 1; i <= N; i++)
	//	printf ("%d ", fib[i]);
	//printf ("\n");
	px = 6;
	for (i = 5; i <= N; i++) {
	
	       D[i][1] = D[i][2] = sol;
	       sol = (sol * 2) % mod;
	       py = px;
	       for (j = 3; j <= i; j++) {
		       D[i][j] = (D[i][j - 1] + fib[py]) % mod;
		       py -= 2;
		       sol = (sol + D[i][j]) % mod;
	       }
	       px += 2;
	}
	/*
	for (i = 4; i <= N; i++) {
		for (j = 1; j <= i; j++)
			printf ("%d ", D[i][j]);
		printf ("\n");
	}*/
	if (N == 3) printf ("1\n");
	else if (N == 2) printf ("0\n");
	else 
	printf ("%d\n", sol);
	return 0;
}