Pagini recente » Cod sursa (job #3326895) | Cod sursa (job #3323377) | Cod sursa (job #3321858) | Cod sursa (job #3320618) | Cod sursa (job #3327775)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("expresii2.in");
ofstream fout("expresii2.out");
int n, k, p, i, j, litRasp, nr, d[102][102];
char rasp[102], lCur;
bool ok = false;
int main() {
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin >> n >> k >> p;
d[0][0] = 1;
for(i = 0; i < n; i++) {
for(j = 0; j <= i + 1; j++) {
if(i > 0 && j == 0) continue;
if(j > 0) d[i + 1][j - 1] += k * d[i][j];
if(i < n - 1) {
//d[i][j] += d[i - 1][max(0, j - 1)];
if(j == 0) d[i + 1][j + 1] += d[i][j];
else d[i + 1][j ] += d[i][j];
}
if(j > 0) d[i + 1][j + 1] += 2 * d[i][j];
else d[i + 1][j + 2] += 2 * d[i][j];
}
}
fout << d[n][0] << "\n";
nr = 0;
litRasp = 0;
d[0][1] = 1;
for(i = 0; i < n; i++) {
for(lCur = 'A'; lCur - 'A' < k; lCur++) {
if(p > d[n - i - 1][nr + 1]) p -= d[n - i - 1][nr + 1];
else break;
}
if(lCur - 'A' < k) {
rasp[litRasp++] = lCur;
nr++;
}
else {
ok = false;
if(nr >= 2) {
if(p > d[n - i - 1][nr - 1]) p -= d[n - i - 1][nr - 1];
else {
rasp[litRasp++] = '+';
nr--;
ok = true;
}
}
if(ok) continue;
if(nr >= 2) {
if(p > d[n - i - 1][nr - 1]) p -= d[n - i - 1][nr - 1];
else {
rasp[litRasp++] = '*';
nr--;
ok = true;
}
}
if(ok) continue;
rasp[litRasp++] = '!';
}
}
fout << rasp;
return 0;
}