中国宁波新闻网引擎优化seo怎么做
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 longint 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 longint 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;
}