4653. 数位排序

4653. 数位排序

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

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

例如,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

结构体排序

#include<bits/stdc++.h>
using namespace std;

typedef long long int ll;
const int N=1000010;

struct style{
    int num;
    ll sum_num;
};

struct style nums[N];
bool cmp(struct style n1,struct style n2){
    if(n1.sum_num!=n2.sum_num)  return n1.sum_num < n2.sum_num;
    else return n1.num < n2.num;
}

int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        nums[i].num=i+1;
        int temp=i+1;
        ll sum=0;
        while(temp) sum+=temp%10,temp/=10;
        nums[i].sum_num=sum;
    }
    sort(nums,nums+n,cmp);
    //for(int i=0;i<n;i++)    cout<<nums[i].num<<" ";
    cout<<nums[m-1].num;
    return 0;
}
posted @   认真游泳的鱼  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示