L1-050 倒数第N个字符串
Problem
Solution
总共有 个字符串,倒数第 n 个,就是第
- n + 1 个。由于输出的时 'a' + x ,我们从 0 开始编号,也就是第
- n 个。
类似于10进制转26进制 。
Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
int l, n, t;
char a[10];
signed main()
{
cin >> l >> n;
t = 1;
for(int i = 1; i <= l; i++)
t *= 26;
t = t - n;
for(int i = 0; i < l; i++) {
a[i] = 'a' + (t % 26);
t /= 26;
}
for(int i = l - 1; i >= 0; i--)
cout << a[i];
}
超时代码,深搜
#include <bits/stdc++.h>
using namespace std;
#define int long long
int l, n, k, maxn;
int a[10];
bool vis[10];
void dfs(int u)
{
if(k == maxn) return ;
if(u == l + 1) {
k++;
if(k == maxn) {
for(int i = 1; i <= l; i++)
printf("%c", 'a' + a[i]);
}
return ;
}
for(int i = 0; i < 26; i++) {
if(!vis[u]) {
a[u] += i;
vis[u] = true;
dfs(u + 1);
if(k == maxn) return ;
a[u] -= i;
vis[u] = false;
}
}
}
signed main()
{
cin >> l >> n;
memset(a, 0, sizeof(a));
maxn = 1;
for(int i = 1; i <= l; i++)
maxn *= 26;
maxn = maxn - n + 1;
dfs(1);
return 0;
}