255992026-02-22 16:13:11999Kígyózó szavakcpp17Hibás válasz 30/10039ms1452 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

string s(int ch,int mxl,vector<array<int,26>> &hany, int k){
    if(mxl==0||k==1)return "";
    k--;
    if(ch==0){
        return 'b'+s(ch+1,mxl-1,hany,k);
    }
    if(ch==25){
        return 'y'+s(ch-1,mxl-1,hany,k);
    }
    if(hany[mxl][ch-1]>=k){
        char c='a'+(ch-1);
        return c+s(ch-1,mxl-1,hany,k);
    }
    char c='a'+(ch+1);
    k-=hany[mxl][ch-1];
    return c+s(ch+1,mxl-1,hany,k);

}


int main() {
    int n,h;cin>>h>>n;
    vector<array<int,26>> dp(h+1),hany(h+1);
    for(int i = 0;i<26;i++){
        dp[1][i]=1;
        hany[1][i]=1;
    }
    for(int i = 2;i<=h;i++){
        for(int j = 0;j<26;j++){
            dp[i][j]=(j>0?dp[i-1][j-1]:0)+(j<25?dp[i-1][j+1]:0);
            hany[i][j]=hany[i-1][j]+dp[i][j];
        }
    }
    /*for(int j = 0;j<26;j++){
        cout<<j<<": ";
        for(int i = 1;i<=h;i++){
            cout<<dp[i][j]<<", ";
        }cout<<endl;
    }*/
    while(n--){
        int k;cin>>k;
        string ans="";
        int kezdobet=0;
        for(int i = 0;i<26;i++){
            if(k<=hany[h][i]){
                kezdobet=i;
                break;
            }
            k-=hany[h][i];
        }
        ans+='a'+kezdobet;
        ans+=s(kezdobet,h-1,hany,k);
        cout<<ans<<endl;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base30/100
1Elfogadva0/01ms316 KiB
2Elfogadva0/01ms508 KiB
3Elfogadva5/51ms512 KiB
4Elfogadva5/51ms316 KiB
5Elfogadva5/52ms316 KiB
6Elfogadva5/53ms316 KiB
7Elfogadva5/53ms316 KiB
8Elfogadva5/53ms316 KiB
9Hibás válasz0/514ms664 KiB
10Hibás válasz0/513ms560 KiB
11Hibás válasz0/518ms868 KiB
12Hibás válasz0/520ms860 KiB
13Hibás válasz0/539ms1452 KiB
14Hibás válasz0/68ms580 KiB
15Hibás válasz0/618ms820 KiB
16Hibás válasz0/612ms716 KiB
17Hibás válasz0/610ms608 KiB
18Hibás válasz0/712ms756 KiB
19Hibás válasz0/737ms1384 KiB
20Hibás válasz0/713ms564 KiB