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;
}
标签:struct,int,sum,num,4653,排序,数位
From: https://www.cnblogs.com/SkyDusty/p/17024289.html