Cod sursa(job #25563)

Utilizator snaked31Stanica Andrei snaked31 Data 4 martie 2007 12:56:54
Problema Expresii 2 Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 1.13 kb
#include <stdio.h>
#include <string.h>

#define nm 45

int n, k, p, i, j, K, l, nrsol, len;
int P[nm][nm];
char s[nm];

void read()

{
	scanf("%d %d %d", &n, &k, &p);
}


void solve()

{
	P[1][1] = k;
		
	for (i=2; i<=n; i++)
		for (j=1; j<=k && j<=i; j++)
		{
			P[i][j] = 0;
			for (K=1; K<i; K++)
				for (l=1; l<=j && l <=K; l++)
				{
					P[i][j] += P[K][l] * P[i - K - 1][j - l];
				}
			//printf("P[i][j] %d %d %d\n", i, j, P[i][j]);
			for (K=1; K<i; K++)
				for (l=1; l<=j && l <=K; l++)
				{
					P[i][j] += P[K][l] * P[i - K - 1][j - l];
				}
				P[i][j] += P[i-1][j];
		}
		
/*	for (i=1; i<=n; i++)
	{
		for (j=1; j<=k; j++)
			printf("%d ", P[i][j]);
		printf("\n");
	}*/
		
	nrsol = 0;
	for (i=1; i<=k; i++)
		nrsol += P[n][i];
}


void write()

{
	printf("%d\n", nrsol);
	memset(s, 0, sizeof(s));
	for (i=0; i<n/2; i++)
		s[i] = 'A';
	len = strlen(s);
	for (i=1; i<len; i++)
		s[strlen(s)] = '+';
	if ((int)strlen(s) < n)
		s[strlen(s)] = '!';
	printf("%s\n", s); 
}


int main()

{
	freopen("expresii2.in" ,"r", stdin);
	freopen("expresii2.out","w",stdout);
	
	read();
	solve();
	write();
	
	fclose(stdin);
	fclose(stdout);

	return 0;
}