AcWing 3425:小白鼠排队 ← 北京大学考研机试题

2023-12-11 14:28

本文主要是介绍AcWing 3425:小白鼠排队 ← 北京大学考研机试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目来源】
https://www.acwing.com/problem/content/3428/

【题目描述】
N 只小白鼠,每只鼠头上戴着一顶有颜色的帽子。
现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。
帽子的颜色用 red,blue 等字符串来表示。
不同的小白鼠可以戴相同颜色的帽子。
白鼠的重量用整数表示。

【输入格式】
第一行为一个整数 N,表示小白鼠的数目。
下面有 N 行,每行是一只白鼠的信息。第一个为不大于 100 的正整数,表示白鼠的重量;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过 10 个字符。
注意:白鼠的重量各不相同。

【输出格式】
按照白鼠的重量
从大到小的顺序输出白鼠的帽子颜色。

【数据范围】
1≤N≤100

【输入样例】
3
30 red
50 blue
40 green

【输出样例】
blue
green
red

【算法分析】
一、本题的一种实现方法需要按
结构体某一字段对结构体数组进行排序,详见:
https://blog.csdn.net/hnjzsyjyj/article/details/120184972
例如,若自定义的结构体 Person 的内容如下:

struct Person {string name;int age;float height;
};

则可自定义的递增函数 up()、递减函数 down() 的内容如下:

int up(Person u,Person v) { //ascending by heightif(u.height==v.height) return u.name<v.name; //If equal,ascending by namereturn u.height<v.height;
}int down(Person u,Person v) { //descending by heightif(u.height==v.height) return u.name>v.name; //If equal,descending by namereturn u.height>v.height;
}

若 p 为结构体数组,则在主函数中调用递增函数 up()、递减函数 down() 的代码如下:

sort(p,p+n,up); //Sort the structured array p by ascending field heightsort(p,p+n,down); //Sort the structured array p by descending field height

二、本题的另一种实现方法是利用STL pair,然后调用 sort() 函数对 STL pair 进行排序。需要注意的是,sort() 函数默认是按照 pair 的 first 域进行升序排序。如果 first 域相同,则按照 second 域进行升序排序。
若 p 为 pair 数组,则对其 first 域默认进行升序排序的代码如下:

sort(p,p+n); //By default, ascending by the first field of array p


【算法代码一:结构体排序】

#include <bits/stdc++.h>
using namespace std;
const int maxn=105;struct node {int w;string color;
} a[maxn];bool down(node a,node b){return a.w>b.w; //descending by weight
}int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].w>>a[i].color;}sort(a+1,a+1+n,down);for(int i=1;i<=n;i++){cout<<a[i].color<<endl;}
}/*
in:
3
30 red
50 blue
40 greenout:
blue
green
red
*/


【算法代码二:STL pair】

#include <bits/stdc++.h>
using namespace std;const int maxn=105;
pair<int,string> q[maxn];int main() {int n;cin>>n;for(int i=0; i<n; i++) {cin>>q[i].first>>q[i].second;}sort(q,q+n); //By default, ascending by the first fieldfor(int i=n-1; i>=0; i--) {cout<<q[i].second<<endl;}return 0;
}/*
in:
3
30 red
50 blue
40 greenout:
blue
green
red
*/





【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/120184972
https://blog.csdn.net/qq_27538633/article/details/126441458





 

这篇关于AcWing 3425:小白鼠排队 ← 北京大学考研机试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/481008

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

【AcWing】851. 求最短路

spfa算法其实是对贝尔曼福特算法做一个优化。 贝尔曼福特算法会遍历所有边来更新,但是每一次迭代的话我不一定每条边都会更新,SPFA是对这个做优化。 如果说dist[b]在当前这次迭代想变小的话,那么一定是dist[a]变小了,只有a变小了,a的后继(b)才会变小。 用宽搜来做优化,用一个队列,队列里边存的就是所有变小了的结点(队列里存的是待更新的点)。 基本思路就是我更新过谁,我再拿

【中等】保研/考研408机试-二分查找(模板题)

二分查找就是在一个有序数组中查找某个值,以首端尾端的中点mid查找对比,mid与要查找的数进行对比,看落在哪个区间,在那个区间重新得到首端和尾端,进而得到新的mid值。 一、模板题 二分查找-I_牛客题霸_牛客网 class Solution {public:int search(vector<int>& nums, int target) {int left=0,right=nums.s

【AcWing】852. spfa判断负环

#include<iostream>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N= 1e5+10;int n,m;int h[N],w[N],e[N],ne[N],idx;int dist[N],cnt[N];//cnt存最短路径的边数bool st[N];v

看病要排队这个是地球人都知道的常识

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言​📝唯有付出,才有丰富的果实收获! 看病要排队这个是地球人都知道的常识。 不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来

广东省特殊食品生产试题分享

1.食品污染是指在各种条件下,导致有毒有害物质进入到食物中,造成以下哪项发生转变的过程。(D) A.食品的安全性 B.食品的养分性 C.食品的感官性状 D.以上都是 2.食品污染物是指(D) A.生物性污染物 B.化学性污染物 C.物理性污染物 D.以上都是 3.关于菌落总数的表达,错误的选项是(A) A.反映食品对人体安康的危害程度 B.是食品清洁状态的标志 C.推测食品的耐保藏性 D.指1g检

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

【时时三省】c语言例题----华为机试题< 查找组成一个偶数最接近的两个素数>

山不在高,有仙则名。水不在深,有龙则灵。                                                                         ----CSDN 时时三省 1,题目 HJ60 查找组成一个偶数最接近的两个素数 描述 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个

考研408《计算机组成原理》复习笔记,第一章计算机系统概述

本人打算从今到2026年不再更新过多的前后端开发的笔记,因为要准备考研了,所以停更前面的开发教程。 这些都是我看完书、视频、做完题后,结合个人理解总结的知识点,希望对各位有帮助。一切都是用最快最精炼的方式讲清楚。 一、计算机发展历程 第一代:电子管时代第二代:晶体管时代第三代:中小规模集成电路时代第四代:超大规模集成电路时代 就这么记就行了,很少考你历程这些细节的。 二、计算机系统结