5338 2023. 04. 25 23:34:25 kohumark Kígyózó szavak cpp17 Elfogadva 100/100 30ms 4608 KiB
#include <iostream>
using namespace std;
int m=4; int c=0;
int h=0; int n=0;
unsigned long long t[26][1000];

void solveend(int x, int i, int a){
	if(x>0){
		if((unsigned)x<=t[i-1][h-a]&&i>0){cout << (char)(i+96); solveend(x-1,i-1,a+1);}
		else{
			cout << (char)(i+98);
			if(i>0) solveend(x-t[i-1][h-a]-1,i+1,a+1);
			else solveend(x-1,i+1,a+1);
		}
	}
		
}

void solve(int x){
	int i=0;
	while(t[i][h-1]<(unsigned)x){
		x-=t[i][h-1]; i++;
	}
	cout << (char)(i+97);
	solveend(x-1,i,2);
}

int main(){
	cin.tie(0); ios_base::sync_with_stdio(false);
	cin >> h >> n;
	for(int i=0; i<26; i++) t[i][0]=1;
	for(int i=1; i<25; i++) t[i][1]=3;
	t[0][1]=2; t[25][1]=2;	
	for(int j=2; j<h; j++){
		for(int i=0; i<26; i++){
			if(i==0) t[i][j]=t[i][j-1]+t[i+1][j-1]-t[i+1][j-2];
			else if(i==25) t[i][j]=t[i][j-1]+t[i-1][j-1]-t[i-1][j-2];
			else t[i][j]=t[i][j-1]+t[i-1][j-1]-t[i-1][j-2]+t[i+1][j-1]-t[i+1][j-2];
		}
	}
	for(int i=0; i<n; i++){int x; cin >> x; solve(x); cout << '\n';}
}

Részfeladat Összpont Teszt Verdikt Idő Memória
base 100/100
1 Elfogadva 0/0 3ms 2312 KiB
2 Elfogadva 0/0 3ms 2456 KiB
3 Elfogadva 5/5 3ms 2672 KiB
4 Elfogadva 5/5 3ms 2884 KiB
5 Elfogadva 5/5 3ms 3128 KiB
6 Elfogadva 5/5 3ms 3124 KiB
7 Elfogadva 5/5 3ms 3088 KiB
8 Elfogadva 5/5 3ms 3364 KiB
9 Elfogadva 5/5 13ms 3412 KiB
10 Elfogadva 5/5 10ms 3740 KiB
11 Elfogadva 5/5 16ms 3732 KiB
12 Elfogadva 5/5 17ms 3960 KiB
13 Elfogadva 5/5 30ms 4264 KiB
14 Elfogadva 6/6 8ms 3992 KiB
15 Elfogadva 6/6 16ms 4296 KiB
16 Elfogadva 6/6 10ms 4392 KiB
17 Elfogadva 6/6 9ms 4256 KiB
18 Elfogadva 7/7 10ms 4272 KiB
19 Elfogadva 7/7 29ms 4608 KiB
20 Elfogadva 7/7 12ms 4508 KiB