Cod sursa(job #3327776)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 5 decembrie 2025 10:36:29
Problema Expresii 2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("expresii2.in");
ofstream fout("expresii2.out");
long long 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;
}