刷题日记day15-按身高和体重排队
文章目录
- 前言
- 一、问题复述
- 二、解法及其思想
- 三、代码实现及细节
前言
简单写个日记记录我刷了什么题以及心得总结。
一、问题复述
- 学生按编号进行标识,对他们进行按身高和体重的低到高排列。排列队则:先按身高排,身高同按照体重排。身高体重都相同再按照编号排。
- 输入:
- 第一行:学生个数
- 第二行:所有学生身高,以空格分隔
- 第三行:所有学生体重,以空格分隔
- 输出:按编号的排列结果,从1开始编号,以空格分隔
二、解法及其思想
- 简单的自定义排序和数据处理。
三、代码实现及细节
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
struct info {
int num;
int height;
int weight;
info(int num,int h, int w) :num(num),height(h), weight(w) {}
};
bool compare(info a, info b) {
if (a.height != b.height) {
return a.height < b.height;
}
else if(a.weight!=b.weight){
return a.weight < b.weight;
}
else {
return a.num < b.num;
}
}
int main() {
int n;
cin >> n;
vector<int> hs;
vector<int> ws;
for(int i = 0; i < n; i++) {
int val;
cin >> val;
hs.push_back(val);
}
for (int i = 0; i < n; i++) {
int val;
cin >> val;
ws.push_back(val);
}
vector<info> inf;
for (int i = 0; i < n; i++) {
//emplace_back可直接构造
inf.emplace_back(i+1,hs[i], ws[i]);
}
sort(inf.begin(), inf.end(), compare);
for (auto e : inf) {
cout << e.num << " ";
}
return 0;
}