Pagini recente » Cod sursa (job #2292750) | Cod sursa (job #3222563) | Cod sursa (job #2927582) | Cod sursa (job #35823) | Cod sursa (job #926487)
Cod sursa(job #926487)
#include<stdio.h>
#define maxdim 33
#define sigma 29
FILE*f=fopen("expresii2.in","r");
FILE*g=fopen("expresii2.out","w");
int n,k;
const int op1 = 27,op2 = 28,NOT = 29;
long long p,D[maxdim][maxdim][maxdim];
int vsol[maxdim];
int main () {
fscanf(f,"%d %d %lld",&n,&k,&p);
D[n][2][op1] = D[n][2][op2] = D[n][0][NOT] = 1;
for ( int i = n ; i >= 2 ; --i ){
for ( int j = 0 ; j <= n ; ++j ){
for ( int last = 1 ; last <= sigma ; ++last ){
if ( j > 0 ){
for ( int now = 1 ; now <= k ; ++now ){
D[i-1][j-1][now] += D[i][j][last];
}
}
D[i-1][j][NOT] += D[i][j][last];
if ( j > 0 ){
D[i-1][j+1][op1] += D[i][j][last];
D[i-1][j+1][op2] += D[i][j][last];
}
}
}
D[i-1][2][op1] += 1;
D[i-1][2][op2] += 1;
for ( int now = 1 ; now <= k ; ++now ){
D[i-1][0][now] += 1;
}
}
long long sol = 0;
for ( int i = 1 ; i <= k ; ++i ){
sol += D[1][0][i];
}
int j = 0;
for ( int i = 1 ; i <= n ; ++i ){
for ( int c = 1 ; c <= sigma ; ++c ){
if ( D[i][j][c] < p ){
p -= D[i][j][c];
}
else{
vsol[i] = c;
if ( c == op1 || c == op2 ) --j;
if ( c <= 26 && !(D[i][j][c] == p && i == 1) ) ++j;
break ;
}
}
if ( !vsol[i] ){
vsol[i] = NOT;
}
}
fprintf(g,"%lld\n",sol);
for ( int i = 1 ; i <= n ; ++i ){
if ( vsol[i] <= 26 ) vsol[i] += 'A'-1;
else if ( vsol[i] == 27 ) vsol[i] = '+';
else if ( vsol[i] == 28 ) vsol[i] = '*';
else if ( vsol[i] == 29 ) vsol[i] = '!';
fprintf(g,"%c",vsol[i]);
}
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}