题目描述
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。
输入格式:
输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤105)。
输出格式:
在一行中输出对应序列倒数第 N 个字符串。题目保证这个字符串是存在的。
思路
1.倒数第n个字符串转换为正数第m个
2.因为 L <= 6 所以我们用一个大小为6的seq表示这个字符串 0表示'a'
3.将m转换为26进制表示 如28 表示为 {0,0,0,0,1,2}
4.输出需要的个数即可
代码
#include <bits/stdc++.h>
#define PII pair<int, int>
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 500005;
using namespace std;
int l, n;
int seq[] = {0,0,0,0,0,0};
int main(){
cin >> l >> n;
int m = pow(26, l) - n; //正数第m个
for(int i = 5; i >= 0; i--) //将m转换为26进制
seq[i] = m % 26, m /= 26;
for(int i = 6 - l; i < 6; i++)
cout << (char)(seq[i] + 'a');
return 0;
}