题意:给你一个n和k 要你找到长度为n 字典序第k小的字符串 定义一个字符串合法:第i的字符的范围只能是前i-1个字符中的最大值+1

思路:我们dp[n][i][j]表示长度为n 在第i位 最大值为j的序列有多少个 随后我们可以直接模仿找第k大一样找到第k个字符串

#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-6;
const int N = 1e6+7;
typedef long long ll;
typedef __int128 bll;
const ll mod = 998244353;
using namespace std;
inline __int128 read() {
__int128 x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
inline void print(__int128 x)
{
if(x<0){putchar('-');x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
bll dp[30][30][30];
char v[30];
bll dfs(int len,int now,int mx){
if(now==len){
dp[len][now][mx]=1;
return dp[len][now][mx];
}
if(dp[len][now][mx]!=-1) return dp[len][now][mx];
bll ans=0;
for(int i=1;i<=min(mx+1,26);i++){
if(i<=mx){
ans+=dfs(len,now+1,mx);
}else{
ans+=dfs(len,now+1,i);
}
}
dp[len][now][mx]=ans;
return ans;
}
int main(){
// ios::sync_with_stdio(false);
// cin.tie(0); cout.tie(0);
int t; scanf("%d",&t);
for(int i=0;i<30;i++)
for(int j=0;j<30;j++)
for(int k=0;k<30;k++)
dp[i][j][k]=-1;
for(int i=1;i<=26;i++)
dfs(i,1,1);
int w=0;
// print(dp[3][1][1]);
while(t--){
int n; scanf("%d",&n);
bll k; k=read();
int mx=1;
printf("Case #%d: ",++w);
for(int i=1;i<=n;i++){
v[i]='A';
for(int j=1;j<=mx+1;j++){
//cout<<k<<" "<<dp[n][i][j]<<endl;
int p=max(mx,j);
if(dp[n][i][p]>=k){
// mx=max(mx,j);
v[i]=char(j+'A'-1);
//putchar('A' + j - 1);
mx=max(mx,p);
// cout<<j<<endl;
break;
}else{
k-=dp[n][i][p];
}
}
}
for(int i=1;i<=n;i++)
printf("%c",v[i]);
puts("");
}
return 0;
}

最新文章

  1. [转]: stm328种GPIO模式
  2. java中文乱码解决方法汇总
  3. MetInfo数据库结构表
  4. dr.wondr博士随笔之三星某古董智能机GTXXXX 的取证恢复一例
  5. Ajax的实现
  6. IntelliJ IDEA 15 部署Tomcat及创建一个简单的Web工程
  7. Linux编程之《进程/线程绑定CPU》
  8. Hessian详解
  9. java异常处理练习
  10. Windows10系统故障检测你知道多少-上海IT33
  11. 图数据库orientDB(1-1)SQL基本操作
  12. [转]用C#在windows上操控电脑自带蓝牙(入道指南)
  13. AspNetCore MVC + Vue.Js 项目搭建
  14. python——eval()函数
  15. node爬虫扒小说
  16. iOS自动布局——Masonry详解
  17. Linux6.5 安装Python3.X(转载)
  18. 算法基础:删除字符串中出现次数最少的字符(Golang实现)
  19. 《java虚拟机》汇总所有关键要点
  20. Design-341. Flatten Nested List Iterator

热门文章

  1. Java基础--接口回调(接口 对象名 = new 类名)理解
  2. 3.k8s存储之ConfigMap、Secret
  3. grep和egrep
  4. 【ORA】ORA-4031错误分析和解决办法
  5. Python机器学习笔记:奇异值分解(SVD)算法
  6. 分布式系统:dubbo的连接机制
  7. Eureka详解系列(一)--先谈谈负载均衡器
  8. Py-解决粘包现象,tcp实现并发,tcp实现传输文件的程序,校验思路,线程与进程
  9. Python内存浅析
  10. YOLOv4