1237 2022. 03. 27 19:38:57 k_balint Kígyózó szavak cpp14 Elfogadva 100/100 8ms 2660 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=2e9;

int n,q;
ll dp[1003][26];

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    for(int i=0;i<26;i++){
        dp[1][i]=1;
    }

    for(int i=2;i<=1000;i++){
        for(int j=0;j<26;j++){
            dp[i][j]=1;
            if(j) dp[i][j]+=dp[i-1][j-1];
            if(j<25) dp[i][j]+=dp[i-1][j+1];
            dp[i][j]=min(dp[i][j],inf);
        }
    }

    cin>>n>>q;

    while(q--){
        string ans="";

        int k; cin>>k;
        int let=0;
        while(dp[n][let]<k){
            k-=dp[n][let];
            let++;
        }

        int pos=n;
        while(1){
            ans.push_back(let+'a'); --k; 
            if(!k) break;
            if(!let){++let;--pos;continue;}
            if(let==25){--let;--pos;continue;}

            if(k<=dp[pos-1][let-1]){
                --let;
            }
            else{
                k-=dp[pos-1][let-1];
                ++let;
            }

            --pos;
        }

        cout << ans << endl;
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 100/100
1 Elfogadva 0/0 3ms 2408 KiB
2 Elfogadva 0/0 2ms 2440 KiB
3 Elfogadva 5/5 2ms 2340 KiB
4 Elfogadva 5/5 3ms 2348 KiB
5 Elfogadva 5/5 2ms 2352 KiB
6 Elfogadva 5/5 3ms 2356 KiB
7 Elfogadva 5/5 2ms 2360 KiB
8 Elfogadva 5/5 3ms 2504 KiB
9 Elfogadva 5/5 4ms 2532 KiB
10 Elfogadva 5/5 4ms 2544 KiB
11 Elfogadva 5/5 4ms 2564 KiB
12 Elfogadva 5/5 6ms 2556 KiB
13 Elfogadva 5/5 8ms 2588 KiB
14 Elfogadva 6/6 3ms 2572 KiB
15 Elfogadva 6/6 8ms 2600 KiB
16 Elfogadva 6/6 6ms 2604 KiB
17 Elfogadva 6/6 4ms 2624 KiB
18 Elfogadva 7/7 4ms 2632 KiB
19 Elfogadva 7/7 8ms 2660 KiB
20 Elfogadva 7/7 4ms 2652 KiB