2025-7-14-C++ 学习 排序(2)

文章目录

  • 2025-7-14-C++ 学习 排序(2)
  • P1059 [NOIP 2006 普及组] 明明的随机数
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 提交代码
  • P1093 [NOIP 2007 普及组] 奖学金
    • 题目背景
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 输入输出样例 #2
      • 输入 #2
      • 输出 #2
    • 提交代码
  • P1781 宇宙总统
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 提交代码
  • P2676 [USACO07DEC] Bookshelf B
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 提交代码

2025-7-14-C++ 学习 排序(2)

  排序,继续。

P1059 [NOIP 2006 普及组] 明明的随机数

题目描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 NNN111100010001000 之间的随机整数 (N≤100)(N\leq100)(N100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入格式

输入有两行,第 111 行为 111 个正整数,表示所生成的随机数的个数 NNN

222 行有 NNN 个用空格隔开的正整数,为所产生的随机数。

输出格式

输出也是两行,第 111 行为 111 个正整数 MMM,表示不相同的随机数的个数。

222 行为 MMM 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

输入输出样例 #1

输入 #1

10
20 40 32 67 40 20 89 300 400 15

输出 #1

8
15 20 32 40 67 89 300 400

说明/提示

NOIP 2006 普及组 第一题

提交代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int n;cin >> n;vector<int> numbers(n);for (int i = 0; i < n; i++) {cin >> numbers[i];}// 排序sort(numbers.begin(), numbers.end());// 去重vector<int> uniqueNumbers;if (!numbers.empty()) {uniqueNumbers.push_back(numbers[0]);for (int i = 1; i < n; i++) {if (numbers[i] != numbers[i - 1]) {uniqueNumbers.push_back(numbers[i]);}}}// 输出结果cout << uniqueNumbers.size() << endl;for (int num : uniqueNumbers) {cout << num << " ";}cout << endl;return 0;
}    

P1093 [NOIP 2007 普及组] 奖学金

题目背景

NOIP2007 普及组 T1

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 555 名学生发奖学金。期末,每个学生都有 333 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 333 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。

注意,在前 555 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279  
5 279

这两行数据的含义是:总分最高的两个同学的学号依次是 777 号、555 号。这两名同学的总分都是 279279279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 777 的学生语文成绩更高一些。

如果你的前两名的输出数据是:

5 279  
7 279

则按输出错误处理,不能得分。

输入格式

n+1n+1n+1 行。

111 行为一个正整数 n≤300n \le 300n300,表示该校参加评选的学生人数。

222n+1n+1n+1 行,每行有 333 个用空格隔开的数字,每个数字都在 000100100100 之间。第 jjj 行的 333 个数字依次表示学号为 j−1j-1j1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1∼n1\sim n1n(恰好是输入数据的行号减 111)。

保证所给的数据都是正确的,不必检验。

输出格式

555 行,每行是两个用空格隔开的正整数,依次表示前 555 名学生的学号和总分。

输入输出样例 #1

输入 #1

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

输出 #1

6 265
4 264
3 258
2 244
1 237

输入输出样例 #2

输入 #2

8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

输出 #2

8 265
2 264
6 264
1 258
5 258

提交代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;struct Student {int id;int chinese;int math;int english;int total;
};// 自定义比较函数
bool compare(const Student& a, const Student& b) {if (a.total != b.total) {return a.total > b.total; // 总分高的优先}if (a.chinese != b.chinese) {return a.chinese > b.chinese; // 语文成绩高的优先}return a.id < b.id; // 学号小的优先
}int main() {int n;cin >> n;vector<Student> students(n);for (int i = 0; i < n; i++) {students[i].id = i + 1;cin >> students[i].chinese >> students[i].math >> students[i].english;students[i].total = students[i].chinese + students[i].math + students[i].english;}// 排序sort(students.begin(), students.end(), compare);// 输出前5名for (int i = 0; i < 5 && i < n; i++) {cout << students[i].id << " " << students[i].total << endl;}return 0;
}    

P1781 宇宙总统

题目描述

地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 nnn 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统。

输入格式

第一行为一个整数 nnn,代表竞选总统的人数。

接下来有 nnn 行,分别为第一个候选人到第 nnn 个候选人的票数。

输出格式

共两行,第一行是一个整数 mmm,为当上总统的人的号数。

第二行是当上总统的人的选票。

输入输出样例 #1

输入 #1

5
98765
12365
87954
1022356
985678

输出 #1

4
1022356

说明/提示

票数可能会很大,可能会到 100100100 位数字。

1≤n≤201 \leq n \leq 201n20

提交代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;// 比较两个大数字字符串的大小
bool isGreater(const string& a, const string& b) {if (a.length() != b.length()) {return a.length() > b.length();}return a > b;
}int main() {int n;cin >> n;string maxVote = "";int maxIndex = 0;for (int i = 1; i <= n; i++) {string vote;cin >> vote;if (isGreater(vote, maxVote)) {maxVote = vote;maxIndex = i;}}cout << maxIndex << endl;cout << maxVote << endl;return 0;
}    

P2676 [USACO07DEC] Bookshelf B

题目描述

Farmer John 最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了。现在,只有书架的顶上还留有一点空间。

所有 N(1≤N≤20,000)N(1 \le N \le 20,000)N(1N20,000) 头奶牛都有一个确定的身高 Hi(1≤Hi≤10,000)H_i(1 \le H_i \le 10,000)Hi(1Hi10,000)。设所有奶牛身高的和为 SSS。书架的高度为 BBB,并且保证 1≤B≤S<2,000,000,0071 \le B \le S < 2,000,000,0071BS<2,000,000,007

为了够到比最高的那头奶牛还要高的书架顶,奶牛们不得不像演杂技一般,一头站在另一头的背上,叠成一座“奶牛塔”。当然,这个塔的高度,就是塔中所有奶牛的身高之和。为了往书架顶上放东西,所有奶牛的身高和必须不小于书架的高度。

显然,塔中的奶牛数目越多,整座塔就越不稳定,于是奶牛们希望在能够到书架顶的前提下,让塔中奶牛的数目尽量少。现在,奶牛们找到了你,希望你帮她们计算这个最小的数目。

输入格式

  • 111 行:2 个用空格隔开的整数:NNNBBB
  • 2…N+12\dots N+12N+1 行:第 i+1i+1i+1 行是 111 个整数:HiH_iHi

输出格式

  • 111 行:输出 111 个整数,即最少要多少头奶牛叠成塔,才能够到书架顶部。

输入输出样例 #1

输入 #1

6 40
6
18
11
13
19
11

输出 #1

3

说明/提示

输入说明:

一共有 666 头奶牛,书架的高度为 404040,奶牛们的身高在 6…196\dots19619 之间。

输出说明:

一种只用 333 头奶牛就达到高度 404040 的方法:18+11+1318+11+1318+11+13。当然还有其他方法,在此不一一列出了。

提交代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int n, b;cin >> n >> b;vector<int> heights(n);for (int i = 0; i < n; i++) {cin >> heights[i];}// 从大到小排序sort(heights.begin(), heights.end(), greater<int>());int sum = 0;int count = 0;// 贪心策略:优先选择最高的奶牛for (int height : heights) {sum += height;count++;if (sum >= b) {break;}}cout << count << endl;return 0;
}    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88943.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信131~140

1.在组件中使用store对象的数据 // 要想使用store中的数据以及方法 // 需要从 mobx-miniprogram-bindings 方法将 ComponentWithStore 方法 import { ComponentWithStore } from mobx-miniprogram-bindings // 导入store对象 import { numStore } from ../../../stores/numstor…

微美全息借区块链与DRL算法打造资源管理协同架构,达成边缘计算与区块链动态适配

在当今数字化浪潮汹涌的时代&#xff0c;边缘计算与区块链技术正逐步成为驱动技术革新与业务转型升级的核心动力。当这两项前沿技术相互融合&#xff0c;一个兼具高效性与安全性的任务处理系统便得以构建。为了充分挖掘边缘计算系统的性能潜力&#xff0c;避免任务卸载过程中的…

属性绑定

简写模式二.为什么要这样做布尔型attribute动态绑定多个值

链表算法之【获取链表开始入环的节点】

目录 LeetCode-142题 LeetCode-142题 给定一个链表的头节点head&#xff0c;返回链表开始入环的第一个节点&#xff0c;如果链表无环&#xff0c;则返回null class Solution {public ListNode detectCycle(ListNode head) {// checkif (head null || head.next null)retur…

【网络编程】KCP——可靠的 UDP 传输协议——的知识汇总

文章目录前言UDP 协议UDP 的关键指标/特性UDP 的典型应用场景KCP 协议的基础KCP 的构造KCP 协议特性KCP 的可靠传输机制——ARQ三种 ARQ 机制对比KCP 的选择性重传一、基础机制&#xff1a;选择性重传&#xff08;SR&#xff09;二、KCP 对 SR 的增强策略KCP 的激进重传策略——…

量子计算新突破!阿里“太章3.0”实现512量子比特模拟(2025中国量子算力巅峰)

​​摘要​​2025年量子计算竞争进入​​实用化临界点​​&#xff0c;阿里达摩院发布“太章3.0”量子模拟器&#xff0c;在全球首次实现​​512量子比特全振幅模拟​​&#xff0c;较谷歌Sycamore的53比特提升近10倍算力维度。本文深度解析三大技术突破&#xff1a;​​张量网…

DOM事件绑定时机:解决脚本提前加载导致的绑定失败

引言&#xff1a;一个让无数新手抓狂的常见错误在JavaScript开发中&#xff0c;尤其是在前端领域&#xff0c;有一个让无数新手抓狂的问题&#xff1a;明明写了事件监听代码&#xff0c;点击按钮却没有任何反应&#xff01;更令人困惑的是&#xff0c;代码逻辑看起来完全正确&a…

游戏框架笔记

游戏的数据有哪些类型无非是只读数据&#xff08;各种道具配表里的数据&#xff09;和可读可写数据&#xff08;玩家属性、拥有的物品&#xff09;。游戏框架需要哪些管理器用户数据管理器负责找到数据持久化文件&#xff0c;从中读取指定用户的数据&#xff0c;包括玩家的设置…

【C语言进阶】指针面试题详解(2)

上一期内容&#xff0c;大多数的解题思路写在代码中&#xff0c;没有写在正文中&#xff0c;这就导致系统判断文章质量不高&#xff0c;没有什么数据&#xff0c;这一期将思路写在正文中。注意&#xff1a;运行环境是x86 1.题目1思路&#xff1a;&a是取到了整个数组的地址&…

一文读懂现代卷积神经网络—稠密连接网络(DenseNet)

目录 什么是 DenseNet&#xff1f; 稠密块&#xff08;Dense Block&#xff09;详解 一、稠密块的核心思想 二、稠密块的结构组成 1. 卷积单元&#xff08;的结构&#xff09; 2. 密集连接的具体方式 3. 关键参数&#xff1a;增长率&#xff08;Growth Rate, k&#xff0…

关于僵尸进程

深入理解僵尸进程&#xff1a;成因、危害与解决方案 进程终止的条件 我们先了解一下进程销毁的条件&#xff1a; 调用了exit函数在main函数中执行了return语句 无论采用哪种方式&#xff0c;都会有一个返回值&#xff0c;这个返回值由操作系统传递给该进程的父进程。操作系统不…

深入解析进程、线程与协程:现代并发编程的三大支柱

深入解析进程、线程与协程&#xff1a;现代并发编程的三大支柱在计算资源日益丰富的时代&#xff0c;理解并发执行机制已成为每位开发者的必修课。本文将带你深入探索操作系统中的三大并发模型&#xff1a;进程、线程与协程&#xff0c;揭开它们的神秘面纱。引言&#xff1a;并…

奇安信下一代防火墙SecGate3600

一、实验拓扑&#xff1a;二、实验目的&#xff08;1&#xff09;让内网可以访问外网。&#xff08;2&#xff09;让外网能够访问dmz区域的web服务器。&#xff08;3&#xff09;测试防火墙的防毒功能&#xff0c;并进行检测。三、实验步骤&#xff08;1&#xff09;防火墙配置…

基于STM32的智能抽水灌溉系统设计(蓝牙版)

✌️✌️大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是基于《基于STM32的智能抽水灌溉系统设计》。 目录 1、系统功能 2.1、硬件清单 2.2、功能介绍 2.3、控制模式 2、演示视频和实物 3、系统设计框图 4、软件设计流程图 5、原理…

CISSP知识点汇总- 通信与网络安全

CISSP知识点汇总 域1---安全与风险管理域2---资产安全域3---安全工程域4---通信与网络安全域5---访问控制域6---安全评估与测试域7---安全运营域8---应用安全开发一、安全网络架构和保护网络组件 1、OSI 7层协议模型 应用层:SMTP、HTTP、SNMP 、TELNET、 FTP、SFTP、POP3、IM…

C++怎么将可变参数传递给第三方可变参数接口

文章目录&#x1f527; 1. 使用 va_list 转发&#xff08;兼容C/C的传统方案&#xff09;⚙️ 2. 模板参数包转发&#xff08;C11 类型安全方案&#xff09;&#x1f9e9; 3. 替代方案&#xff1a;参数封装与适配**方案A&#xff1a;使用 std::initializer_list (同类型参数)**…

服务端实现阿里云OSS直传

介绍 阿里云上传 OSS 有两种方式&#xff0c;一种是普通上传&#xff0c;一种是客户端直传。 普通上传&#xff0c;就是需要先将文件上传到服务端&#xff0c;然后调用接口将文件上传到阿里云。 当然这种方案经常出现不合理的使用方式&#xff0c;即客户端充当服务端的角色&…

on-policy和offpolicy算法

一句话总结On-policy&#xff08;同策略&#xff09;&#xff1a;边学边用&#xff0c;用当前策略生成的数据更新当前策略。例子&#xff1a;演员自己演完一场戏后&#xff0c;根据观众反馈改进演技。Off-policy&#xff08;异策略&#xff09;&#xff1a;学用分离&#xff0c…

CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG

RT&#xff0c;这个RS485 隔离收发器芯片基本上不可用。本来要买CA-IS3082WX&#xff0c;不小心在某宝买到了没有X 的CA-IS3082W。立创上说没有X 的版本已经停产&#xff0c;连对应的数据手册都找不到&#xff0c;全换成WX 了。 这类半双工485 收发器芯片电路一般都直接把DE 和…

dockerfile 笔记

# 设置JAVA版本 FROM openjdk:20-ea-17-jdk MAINTAINER aaa # 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层 VOLUME /tmp # 拷贝运行JAR包 ARG JAR_FILE COPY app.jar /app.jar RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/…