Pagini recente » Cod sursa (job #1786039) | Cod sursa (job #2859150) | Cod sursa (job #365588) | Cod sursa (job #2213041) | Cod sursa (job #484809)
Cod sursa(job #484809)
/* Mircea Pasoi */
#include <stdio.h>
#include <string.h>
#define MAX_N 105
#define MAX_i 10
#define FIN "munte3.in"
#define FOUT "munte3.out"
#define BASE 1000000000
int N, A[3][MAX_N][MAX_i];
void add ( int A[], int B[] )
{
int i, t = 0;
for ( i = 1; i <= A[0] || i <= B[0] || t; i++, t /= BASE ) {
A[i] = ( t += ( i <= A[0] ? A[i] : A[i] = 0 ) + ( i <= B[0] ? B[i] : B[i] = 0 ) ) % BASE ;
}
A[0] = i - 1;
}
void output ( int A[] ) {
printf ( "%d" , A[A[0]] ) ;
for ( int i = A[0] - 1; i ; --i ) {
printf ( "%09d", A[i] ) ;
}
}
int main(void)
{
int i, i1, j, i2, i3;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
A[0][0][0] = A[0][0][1] = 1;
for (i = 1; i < 2*N-1; i++)
{
i1 = i%3; i2 = (i+2)%3; i3 = (i+1)%3;
for (j = 0; j < N; j++)
{
memcpy(A[i1][j], A[i2][j+1], sizeof(A[0][0]));
if (j > 0) add(A[i1][j], A[i2][j-1]);
if (i > 1 && j != 0) add(A[i1][j], A[i3][j]);
}
}
output(A[(2*N-2)%3][0]);
return 0;
}