Cod sursa(job #738547)

Utilizator SzakatsSzakats Istvan Szakats Data 20 aprilie 2012 20:12:29
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

int a[1000];

int n, m;

int cnt;

void printA()
{
	for(int i = 0; i < n; i++)
		printf("%d ", a[i]);
	printf("\n");
}

void back(int k)
{
	if(k == n) {
		//printA();
		cnt++;
	} else {
		int s;
		if(k >= 3) s = max(a[k-2], a[k-3])+1;
		else if(k >= 2) s = a[k-2]+1;
		else s = 1;
		for(int i = s; i <= m; i++) {
			a[k] = i;
			back(k+1);
		}
	}
}

void one()
{
	n = 3;
	m = 6;
	back(0);
	printf("%d\n", cnt);
}

void table()
{
	for(m = 1; m <= 9; m++)
	{
		for(n = 1; n <= 9; n++)
		{
			cnt = 0;
			back(0);
			printf("%4d ", cnt);
		}
		printf("\n");
	}
}

int b[1000][1000];
int c[1000][1000];

void table2()
{
	//const int n = 9, m = 9;
	int n,m;
	FILE *fin = fopen("sir23.in", "r");
	fscanf(fin, "%d", &n);
	m = n;
	fclose(fin);

	int MOD = 1000000;

	// for n = 1
	for(int i = 0; i < m; i++) {
		b[i][0] = i + 1;
	}
	// for n = 2
	for(int i = 0; i < m; i++) {
		b[i][1] = (b[i][0] * b[i][0]) % MOD;
	}
	c[0][0] = b[0][0];
	c[0][1] = b[0][1];
	for(int i = 1; i < m; i++) {
		c[i][0] = (c[i-1][0] + b[i][0]) % MOD;
		c[i][1] = (c[i-1][1] + b[i][1]) % MOD;
	}
	// for n >= 3
	for(int i = 1; i < m; i++) {
		for(int j = 2; j < n; j++) {
			b[i][j] = (b[i-1][j] + b[i-1][j-1] + c[i-1][j-2]) % MOD;
			//for(int k = 0; k <= i-1; k++)
			//	b[i][j] += b[k][j-2];
			c[i][j] = (c[i-1][j] + b[i][j]) % MOD;
		}
	}

	FILE *fout = fopen("sir23.out", "w");
	int rez = b[n-1][n-1];
	printf("%d\n", rez);
	fprintf(fout, "%d\n", rez);
	fclose(fout);

	/*for(int i = 0; i < m; i++) {
		for(int j = 0; j < n; j++) {
			printf("%4d ", b[i][j]);
		}
		printf("\n");
	}*/
}

int main()
{
	FILE *fin = fopen("adunare.in", "r");
	FILE *fout = fopen("adunare.out", "w");
	int a,b;
	fscanf(fin, "%d %d", &a, &b);
	fprintf(fout, "%d", a+b);
	return 0;
	//one();
	//table();
	table2();
	return 0;
}