首页 > 编程语言 >数位排序【第十三届蓝桥杯省赛C++C组】

数位排序【第十三届蓝桥杯省赛C++C组】

时间:2023-01-05 13:45:52浏览次数:48  
标签:10 13 int C++ 蓝桥 2022 省赛 排序 数位

数位排序

小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。

当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。

例如,\(2022\) 排在 \(409\) 前面,因为 \(2022\) 的数位之和是 \(6\),小于 \(409\) 的数位之和 \(13\)。

又如,\(6\) 排在 \(2022\) 前面,因为它们的数位之和相同,而 \(6\) 小于 \(2022\)。

给定正整数 \(n,m,\)请问对 $1 $到 \(n\) 采用这种方法排序时,排在第 \(m\) 个的元素是多少?

输入格式
输入第一行包含一个正整数 \(n\)。

第二行包含一个正整数 \(m\)。

输出格式
输出一行包含一个整数,表示答案。

数据范围
对于 \(30%\) 的评测用例,\(1≤m≤n≤300\)。
对于 \(50%\) 的评测用例,\(1≤m≤n≤1000\)。
对于所有评测用例,\(1≤m≤n≤106\)。

输入样例:
13
5
输出样例:
3
样例解释
\(1\) 到 \(13\) 的排序为:\(1,10,2,11,3,12,4,13,5,6,7,8,9\)。

第 \(5\) 个数为 \(3\)。

Code

点击查看代码
#include<iostream>
#include<algorithm>
#include<vector> 
#define X first
#define Y second

using namespace std;

typedef pair<int,int> PII;
int n,m; 
const int N = 1e6 + 10;
vector<PII> q;

int get(int x){
	int ret = 0;
	while(x){
		ret += x % 10;
		x /= 10;
	}
	return ret;
}

bool cmp(PII a,PII b){
	if(a.Y != b.Y)return a.Y < b.Y;
	else return a.X < b.X;
}

int main(){
	cin >> n >> m;
	for(int i = 1; i <= n; i ++)q.push_back({i,get(i)});
	sort(q.begin(),q.end(),cmp);
	cout << q[m - 1].first;
}

注意

  1. vector从0开始而不是1
  2. nlogn时间复杂度 -> 先对每个数进行预处理,保存数位和再进行排序,而不是排序过程中进行处理

标签:10,13,int,C++,蓝桥,2022,省赛,排序,数位
From: https://www.cnblogs.com/J-12045/p/17027306.html

相关文章

  • JSON(C++)
    JSON库​​https://github.com/open-source-parsers/jsoncpp​​​​解决jsoncpp中文乱码问题_weruoaszxcvnm的博客​​jsoncpp中文字符串被转为uuf8的解决办法-走看看......
  • QML/JS/C++
    ​​【QML快速入门】QML类型-fengMisaka​​在Qt C++中调用QML中的Javascript Function_青山绿水北京爷_新浪博客​​​​C++调用QML中的函数-xianyongchao​​C++......
  • visual studio学习VS 配置 VC++ 目录
    1、​​visualstudio新手使用教程​​2、头文件与lib库​​【VisualStudio】VS中添加头文件和lib库的方法​​​​VS2010中VC++目录和C/C++之间的区别。VC++Directories......
  • (MFC)c++字符串相加问题
    在使用CString对象进行相加时,会出现CStringc=CStringA+CStringB;时c只为A,或者B的情况,这种情况不是每次都有的,可以通过每次相加之前releasebuffer的方式来释放缓冲区,......
  • C++不知算法系列之迷宫问题中的“见山不是山”
    1.前言迷宫问题是一类常见的问题。初识此类问题,应该是“见山是山”,理解问题的原始要求,便是查找从起点到终点的可行之路。有了广泛的知识体系之后,应该是"见山不是山"。会......
  • C++:深拷贝和浅拷贝
    1.什么是浅拷贝和深拷贝对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如:classBase{public:Base():m_a(0),m_b(0){}Base......
  • C/C++数学口算比赛系统[2023-01-04]
    C/C++数学口算比赛系统[2023-01-04]题目三数学口算比赛系统设计要求:适用于小学生数学口算比赛的系统。比赛题型分为两种:“四则简单运算”和“四则混合运算”,计算机......
  • C/C++图书管理系统[2023-01-04]
    C/C++图书管理系统[2023-01-04]17、图书管理系统主要包括管理图书的库存信息、每一本书的借阅信息以及每一个人的借书信息。每一种图书的库存信息包括编号、书名、作者、......
  • C++相关
    解释类和对象的关系,并举例说明。(1)类是对象的抽象,对象是类的具体实例。(2)学生是类型,张三是一个具体的学生。classStudent{};Studentzhangsan;构造函数的作用是什么?......
  • C/C++值班安排系统
    C/C++值班安排系统值班安排系统一、系统要求1、问题描述某公司的保安人员由于工作需要进行轮休制度,一星期中每个岗位每人休息一天。预先让每一个人选择自己认为合适的......