题意:给定一个整数n,给定一个整数k,将1~n个整数按字典顺序进行排序,返回排序后第k个元素。

题目链接:HDU6468

多组输入,T<=100,n<=1e6

分析:这个题和之前做的模拟出栈的性质挺像的,不是你将1-n个数字排好序或者直接算出第k个数时谁,而是模拟题意的炒作,一步步填充,填充到第k个元素结束

可以分成两步来做,首先求出以1,2......9开头的数且小于n的数总共有多少个,并且每算出一个就用k-数目,如果到了某个数不够减了,说明我们要求的那个数就是一这个数开头的,跳出循环。

第二步,一点点来,具体实现就直接看代码吧

我自己写还是错了很多次才最终写对

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf=<<;
const int maxn=;
const double pi=acos(-);
const int mod=1e9+;
int ans=,n,k;
//用来得到比n小,以i为开头的数的数目
int getnum(int n,int i){
int base=,sum=;
while(n>=(base*(i+))){
sum+=base;
base*=;
}
if(n>=(base*i))sum+=n-base*i+;
return sum;
}
void getans(int &cnt,int cul){
if(++cnt==k){
ans=cul;
return ;
}
for(int i=;i<=;i++){//注意,这里是从0开始了
int t=cul*+i;
if(t<=n) getans(cnt,t);
if(cnt>=k) return ;//保证有这一步免得程序重复执行
}
}
int main(){
int T;scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&k);
int i;//注意i不要在for循环里定义
for(i=;i<=;i++){
int num=getnum(n,i);
if(k>num) k-=num;
else break;
}
int cnt=;
getans(cnt,i);
cout<<ans<<endl;
}
return ;
}

将1~n个整数按照字典序进行排序的更多相关文章

  1. 将1~n个整数按字典顺序进行排序,返回排序后第m个元素

    给定一个整数n,给定一个整数m,将1~n个整数按字典顺序进行排序,返回排序后第m个元素.n最大可为5000000.字典排序的含义为:从最高位开始比较.1开头的数字排在最前面,然后是2开头的数字,然后是 ...

  2. 现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的

    题目: 现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的 据说这道题是百度校招的一道算法题,反正我觉得我在学校的时候很可 ...

  3. 给一个由n-1个整数组成的未排序的序列,其元素都是1~n中的不同的整数。如何在线性时间复杂度内寻找序列中缺失的整数

    思路分析:尼玛这不就是等差数列么.首先将该n-1个整数相加,得到sum,然后用(1+n)n/2减去sum,得到的差即为缺失的整数.因为1~n一共n个数,n个数的和为(1+n)n/2,而未排序数列的和为 ...

  4. LintCode 整数排序

    题目:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法. 1.冒泡:从头开始,比较相邻的两个元素,大的放在后面.一轮结束之后,最大的数沉底,不参与下一轮比较. ...

  5. lintcode:整数排序||

    题目 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法. 解题 归并排序 public class Solution { /** * @param ...

  6. E - Phone List(字典序,string类型使用)

    Description Given a list of phone numbers, determine if it is consistent in the sense that no number ...

  7. 使用Python在2M内存中排序一百万个32位整数

    译言网 | 使用Python在2M内存中排序一百万个32位整数 使用Python在2M内存中排序一百万个32位整数 译者:小鼠 发表时间:2008-11-13浏览量:6757评论数:2挑错数:0 作者 ...

  8. LinkCode 整数排序II

    http://www.lintcode.com/zh-cn/problem/sort-integers-ii/ 题目 给一组整数,按照升序排序.使用归并排序,快速排序,堆排序或者任何其他 O(n lo ...

  9. 整数划分 NBUT - 1046

    题目很简单,把一个正整数分割成N个正整数之和.但是你得把所有的划分方法列出来,以字典序升序排序.对于每种划分方法,小的数字在前面. 思路:直接深度优先搜索,注意要判断前一位一定会比将要放入答案的因子小 ...

随机推荐

  1. 使用moment.js结合filter过滤器格式化时间

    <td>{{item.ctime | timeFormat('yyyy-MM-dd')}}</td> //pattern = "" 形参的默认值,如果传过来 ...

  2. 高性能Nginx服务器-反向代理

    Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,供 ...

  3. Python3学习之路~5.10 PyYAML模块

    Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation

  4. python框架之Django(7)-Cookie&Session使用

    Cookie 添加 response.set_cookie 添加明文cookie response.set_cookie(key, value='', max_age=None, expires=No ...

  5. 公网k8s

    dm :32750/swagger/ 统一在   cd /opt/iot 删除容器,自动创建容器 dm 更新dm和acl包  dm源文件chart包   cd /var/lib/helmrepo/ h ...

  6. (已解决)jdk安装 系统找不到文件C:\ProgramData\Oracle\Java\javapath\java.exe

    jdk安装好之后,也配置好了环境变量,打开cmd输入javac可以跳出相关信息,可是输入java却一直提示:系统找不到文件C:\ProgramData\Oracle\Java\javapath\jav ...

  7. 设置div 高度 总结

    如果将div 的height 设置为固定的像素值,在不同分辨率的显示屏上,会看到div 在浏览器上的高度不一致.可以以百分比的形式设置div 的高度.注意,这个百分比是针对div 的上一层标签而言的, ...

  8. 即时通讯(III)

    即时通讯的开源库 目前及时通讯可以使用环信.柔云.腾讯云,这些都是基于TCP连接的,UI也是高度定制的,而且它们的技术也是比较成熟的. XMPP比较早,是开源的,但是坑也比较多.传输的数据是XML,造 ...

  9. EasyUI出现多条边框重合的问题

    比如在 下面使用一个datagrid表格,可能出现某几条边框重合的问题,这种情况需要在div一层的panel添加"border:false"属性,datagrid不做处理即可

  10. [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器

    截至自2017-08-11,支持现世已出的几乎所有PC端浏览器版本判断. 受支持的PC端浏览器列表: Edge IE Chrome Firefox Opera Safari QQ浏览器 360系列浏览 ...