168652025-05-14 12:20:59buzaszendvicsKígyózó szavakcpp17Hibás válasz 20/1008ms748 KiB
#include <iostream>
#include <vector>
#include <string>

using namespace std;

const int ALPHABET = 26;
const int MAX_H = 1000;

using ll = long long;
ll dp[ALPHABET][MAX_H + 1];

// Előszámolás: dp[c][l] = hány szó van, ami c betűvel kezdődik és hossza l
void preprocess(int H) {
    for (int c = 0; c < ALPHABET; ++c) {
        dp[c][1] = 1;
    }
    for (int len = 2; len <= H; ++len) {
        for (int c = 0; c < ALPHABET; ++c) {
            dp[c][len] = 0;
            if (c > 0) dp[c][len] += dp[c - 1][len - 1];
            if (c < ALPHABET - 1) dp[c][len] += dp[c + 1][len - 1];
        }
    }
}

// Megadja, hogy összesen hány kígyózó szó kezdődik ezzel a betűvel
ll totalWords(int c, int H) {
    ll sum = 0;
    for (int len = 1; len <= H; ++len) {
        sum += dp[c][len];
    }
    return sum;
}

// Rekurzív szóépítés
void buildWord(int c, int H, ll& K, string& word) {
    word += (char)(c + 'a');
    if (--K == 0) return;

    for (int next_len = 1; next_len < H; ++next_len) {
        for (int nc : {c - 1, c + 1}) {
            if (nc < 0 || nc >= ALPHABET) continue;
            ll cnt = dp[nc][next_len];
            if (K <= cnt) {
                buildWord(nc, next_len, K, word);
                return;
            } else {
                K -= cnt;
            }
        }
    }
}

int main() {
    int H, N;
    cin >> H >> N;

    preprocess(H);

    for (int i = 0; i < N; ++i) {
        ll K;
        cin >> K;

        bool found = false;
        for (int c = 0; c < ALPHABET; ++c) {
            ll count = totalWords(c, H);
            if (K <= count) {
                string result;
                buildWord(c, H, K, result);
                cout << result << '\n';
                found = true;
                break;
            } else {
                K -= count;
            }
        }

        if (!found) {
            cout << "NINCS" << '\n'; // csak biztonság kedvéért
        }
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/100
1Elfogadva0/01ms316 KiB
2Hibás válasz0/01ms316 KiB
3Elfogadva5/51ms316 KiB
4Elfogadva5/51ms316 KiB
5Elfogadva5/51ms316 KiB
6Elfogadva5/52ms316 KiB
7Hibás válasz0/53ms316 KiB
8Hibás válasz0/53ms316 KiB
9Hibás válasz0/54ms748 KiB
10Hibás válasz0/57ms564 KiB
11Hibás válasz0/58ms612 KiB
12Hibás válasz0/58ms564 KiB
13Hibás válasz0/54ms568 KiB
14Hibás válasz0/64ms540 KiB
15Hibás válasz0/68ms612 KiB
16Hibás válasz0/64ms552 KiB
17Hibás válasz0/64ms316 KiB
18Hibás válasz0/74ms564 KiB
19Hibás válasz0/78ms624 KiB
20Hibás válasz0/74ms352 KiB