Pagini recente » Cod sursa (job #2066956) | Cod sursa (job #1911622) | Cod sursa (job #2636734) | Cod sursa (job #2117294) | Cod sursa (job #841135)
Cod sursa(job #841135)
# include <cstdio>
typedef long long ll;
const char *FIN = "expresii2.in", *FOU = "expresii2.out" ;
const int MAX = 31;
ll A[MAX][MAX][MAX], B[MAX], P, solution;
int N, M ;
int main (void) {
fscanf (fopen (FIN, "r"), "%d %d %lld", &N, &M, &P) ;
A[0][1][0] = 1;
for (int i = 0; i < N; ++i) {
for (int j = 0; j <= N; ++j) {
for (int k = 0; k <= M + 2; ++k) {
if (A[i][j][k] == 0) continue ;
if (j < N - i) A[i + 1][j][M + 2] += A[i][j][k];
if (j > 1 || j == 1 && i == N - 1)
for (int l = 0; l < M; ++l)
A[i + 1][j - 1][l] += A[i][j][k];
if (j < N - i - 1)
A[i + 1][j + 1][M] += A[i][j][k], A[i + 1][j + 1][M + 1] += A[i][j][k] ;
}
}
}
for (int i = 0; i < M + 2; ++i) solution += A[N][0][i];
for (int i = N, poz = 0; i ; --i) {
for (int j = 0; j <= M + 2; ++j) {
if (A[i][poz][j] < P) P -= A[i][poz][j];
else {
B[N - i + 1] = j;
poz += (j < M ? 1 : (j < M + 2 ? -1 : 0));
j = M + 3;
break ;
}
}
}
freopen (FOU, "w", stdout) ;
printf ("%lld\n", solution) ;
for (int i = 1; i <= N; ++i)
printf ("%c", (B[i] < M ? (char) B[i] + 'A' : (B[i] == M ? '+' : (B[i] == M + 1 ? '*' : B[i] == M + 2 ? '!' : '\0'))));
}