题意:给定一个整数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. byte转bit

    由于项目需要,传过来的数据是高位到低位的Byte,需要输出低位到高位的bool数组. public static bool[] getBits(byte[] byt) { bool[] ret = n ...

  2. 10.4 再探迭代器-插入/IO/反向

    10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back ...

  3. 对stm32寄存器的理解(个人理解,大神轻喷)

    学习了stm32有一年了,今天想来写写自己对寄存器的理解,帮助那些有志学习stm32的朋友们少走一些弯路. ---------------------------------------------- ...

  4. 笔记-ASP.NET WebApi

    本文是针对ASP.NET WepApi 2 的笔记. Web API 可返回的结果: 1.void 2.HttpResponseMessage 3.IHttpActionResult 4.其他类型 返 ...

  5. Fluxion无线攻击

    使用步骤 github地址 https://github.com/deltaxflux/fluxion 进入到fluxion目录下 ./fluxion 启动fluxion  启动之后会先检测没有安装的 ...

  6. C#-----中使用using详解

    1.using指令 using + 命名空间名字 例:using System;        using System.Data; 2.using语句 定义一个范围,在范围结束时处理对象,出了这个范 ...

  7. mysql order by 多个字段排序

    工作中需用到order by 后两个字段排序,但结果却产生了一个Bug,以此备录. [1]复现问题场景 为了说明问题,模拟示例数据库表students,效果同实例. 如下语句Sql_1: SELECT ...

  8. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图

    vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图 Mand Mobile是面向金融场景设计的移动端组件库,基于Vue.js实现.目前已实际应用于滴滴四大金融业务板块的1 ...

  9. 因微信SSJD分享接口升级,分享变化

    4月25日发版发现的微信分享问题,已确认是腾讯微信开发团队更新的分享的策略,而我们未能收到通知依然沿用老代码造成的.目前已经解决,解决方案如下: 微信分享的shareUrl域名必须与当前环境的安全域名 ...

  10. 1.1:Get Started with Unity Shaders

    文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 第1章开始正式进入Unity Shader的学习. 什么是Shader 本 ...