10063 2024. 03. 25 21:00:23 szil Kígyózó szavak cpp17 Elfogadva 100/100 8ms 3880 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const ll INF = 1e10;

int h, t;
ll cnt[1001][26];

void solve() {
    ll k; cin >> k;
    string ans;
    while (k >= 1) {
        for (int i = 0; i < 26; i++) {
            if (!ans.empty() && abs(i-(ans.back()-'a')) != 1) continue;
            if (cnt[h-ans.size()][i] >= k) {
                ans += char('a'+i);
                k--;
                break;
            } else {
                k -= cnt[h-ans.size()][i];
            }
        }
    }
    cout << ans << "\n";
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin >> h >> t;
    for (int i = 1; i <= h; i++) {
        for (int j = 0; j < 26; j++) {
            cnt[i][j] = 1;
            if (j != 0) cnt[i][j] += cnt[i-1][j-1];
            if (j != 25) cnt[i][j] += cnt[i-1][j+1];
            cnt[i][j] = min(cnt[i][j], INF);
        }
    }
    while (t--) {
        solve();
    }
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 100/100
1 Elfogadva 0/0 3ms 1832 KiB
2 Elfogadva 0/0 3ms 2052 KiB
3 Elfogadva 5/5 3ms 2264 KiB
4 Elfogadva 5/5 3ms 2444 KiB
5 Elfogadva 5/5 3ms 2660 KiB
6 Elfogadva 5/5 3ms 2872 KiB
7 Elfogadva 5/5 3ms 2968 KiB
8 Elfogadva 5/5 3ms 3092 KiB
9 Elfogadva 5/5 6ms 3452 KiB
10 Elfogadva 5/5 4ms 3420 KiB
11 Elfogadva 5/5 6ms 3492 KiB
12 Elfogadva 5/5 6ms 3508 KiB
13 Elfogadva 5/5 8ms 3768 KiB
14 Elfogadva 6/6 4ms 3376 KiB
15 Elfogadva 6/6 6ms 3720 KiB
16 Elfogadva 6/6 4ms 3636 KiB
17 Elfogadva 6/6 4ms 3612 KiB
18 Elfogadva 7/7 4ms 3628 KiB
19 Elfogadva 7/7 8ms 3880 KiB
20 Elfogadva 7/7 4ms 3652 KiB