Pagini recente » Cod sursa (job #757656) | Rating Charlotte Perry (acinstallation723) | Cod sursa (job #159744) | Cod sursa (job #649564) | Cod sursa (job #1584945)
#include <stdio.h>
#define MAXN 30
#define CHARS 26
int n, k, dr = 0;
long long dp[MAXN + 1][MAXN + 1][CHARS + 3], p;
char s[MAXN];
void afis(FILE *out, int n, int k, long long p){
if(n > 0){
int i;
i = 0;
while(dp[n][k][i] < p)
i++;
if(i != 0)
p -= dp[n][k][i - 1];
if(i == CHARS || i == CHARS + 1)
k--;
if(i < CHARS)
k++;
if(i < CHARS)
fputc('A' + i, out);
if(i == CHARS)
fputc('+', out);
if(i == CHARS + 1)
fputc('*', out);
if(i == CHARS + 2)
fputc('!', out);
afis(out, n - 1, k, p);
}
}
int main(){
FILE *in = fopen("expresii2.in", "r");
fscanf(in, "%d%d%lld", &n, &k, &p);
fclose(in);
int i, j, l;
for(j = 0; j < CHARS + 3; j++)
dp[0][0][j] = 1;
for(i = 1; i <= n - 1; i++){
for(j = 0; j <= i; j++){
for(l = 0; l < k; l++)
dp[i][j][l] = dp[i - 1][j + 1][CHARS + 2];
dp[i][j][CHARS + 2] = dp[i - 1][j][CHARS + 2];
if(j > 0){
dp[i][j][CHARS] = dp[i - 1][j - 1][CHARS + 2];
dp[i][j][CHARS + 1] = dp[i - 1][j - 1][CHARS + 2];
}
for(l = 1; l < CHARS + 3; l++)
dp[i][j][l] += dp[i][j][l - 1];
}
}
FILE *out = fopen("expresii2.out", "w");
fprintf(out, "%lld\n", k * dp[n - 1][0][CHARS + 2]);
fputc((p - 1) / dp[n - 1][0][CHARS + 2] + 'A', out);
p = (p - 1) % dp[n - 1][0][CHARS + 2] + 1;
afis(out, n - 1, 0, p);
fclose(out);
return 0;
}