洛谷 【算法1-2】排序

【算法1-2】排序 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 

鄙人不才,刷洛谷,迎蓝桥,【算法1-2】排序 已刷,现将 AC 代码献上,望有助于各位

P1271 选举学生会

【深基9.例1】选举学生会 - 洛谷

题目

解答

思路

将候选人编号及其获得的票数映射到一个一维数组上(即依据候选人编号对票数进行排序),然后根据获得的票数输出编号,如,a 号 获得 b 票,则输出 b 个 a

代码

#include<iostream>
using namespace std;
int ren[1005] = { 0 };
int n;
int m;
int main() {cin >> n >> m;int piao;for (int i = 1; i <= m; i++) {cin >> piao;ren[piao]++;}for (int i = 1; i <= n; i++) {if(ren[i]!=0)for (int j = 0; j < ren[i]; j++) {cout << i << " ";}}return 0;
}

P1177 排序

【模板】排序 - 洛谷

题目

解答

思路

快排和归并排序模板均可解决

代码

//快排
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int a[100005];
void quick_sort(int a[], int l, int r) {if (l >= r)return;int base = a[l + r >> 1], i = l - 1, j = r + 1;while (i < j) {do i++; while (a[i] < base);do j--; while (a[j] > base);if (i < j)swap(a[i], a[j]);}quick_sort(a, l, j);quick_sort(a, j + 1, r);
}
int main() {cin >> n;for (int i = 0; i < n; i++) cin >> a[i];quick_sort(a, 0, n - 1);for (int i = 0; i < n - 1; i++)cout << a[i] << " ";cout << a[n - 1] << endl;return 0;
}//归并排序
#include<iostream>
using namespace std;
int n;
int a[100005], tmp[100005];
void merge_sort(int a[], int l, int r) {if (l >= r)return;int mid = (l + r) / 2;merge_sort(a, l, mid);merge_sort(a, mid + 1, r);int k = 0, i = l, j = mid + 1;while (i <= mid && j <= r) {if (a[i] < a[j]) {tmp[k] = a[i];k++;i++;}else {tmp[k] = a[j];k++;j++;}}while (i <= mid) {tmp[k] = a[i];k++;i++;}while (j <= r) {tmp[k] = a[j];k++;j++;}for (int i = l, j = 0; i <= r; i++, j++)a[i] = tmp[j];
}
int main() {cin >> n;for (int i = 0; i < n; i++)cin >> a[i];merge_sort(a, 0, n - 1);for (int i = 0; i < n; i++)cout << a[i] << " ";cout << endl;return 0;
}

P1059 明明的随机数

[NOIP2006 普及组] 明明的随机数 - 洛谷

题目

解答

思路

使用数组映射产生的随机数,数组元素的下标表示产生的随机数,对应的数组元素表示该数的个数

代码

#include<iostream>
using namespace std;
int N;
int num[1005] = { 0 };
int a[105];
int main() {cin >> N;for (int i = 0; i < N; i++) {cin >> a[i];num[a[i]]++;}int q = 0;int b[100];for (int i = 1; i <= 1000; i++) {if (num[i] != 0) {b[q] = i;q++;}	}cout << q << endl;for (int i = 0; i < q; i++)cout << b[i] << " ";return 0;
}

P1923 求第 k 小的数

【深基9.例4】求第 k 小的数 - 洛谷

题目

解答

思路

使用 nth_element

当采用默认的升序排序规则时,nth_element()可以从某个序列中找到第 n 小的元素 K,并将 K 移动到序列中第 n 的位置,且整个序列经过此函数处理后,所有位于 K 之前的元素都比 K 小,所有位于 K 之后的元素都比 K 大

快排+二分

快排一次,将数组分为三个区间,分别是小于基准数、等于基准数、大于基准数三个部分,根据 k 与 i 和 j 的关系确定下一次递归的区间

代码

//使用nth_element()
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int n;
int k;
const int N = 5e6 + 100;
int a[N];
int main() {scanf("%d%d",&n,&k);for (int i = 0; i < n; i++)scanf("%d",&a[i]);nth_element(a, a + k, a + n);printf("%d",a[k]);return 0;
}

P1093 奖学金

[NOIP2007 普及组] 奖学金 - 洛谷

题目

解答

思路

写一个比较函数即可

代码

#include<iostream>
#include<algorithm>
using namespace std;
typedef struct student {int num;int ch;int ma;int eng;int sum = 0;
}student;
bool cmp(student s1, student s2) {if (s1.sum != s2.sum)return s1.sum > s2.sum;else {if (s1.ch != s2.ch)return s1.ch > s2.ch;elsereturn s1.num < s2.num;}
}
int main() {int n;cin >> n;student stu[305];for (int i = 0; i < n; i++) {cin >> stu[i].ch;cin >> stu[i].ma;cin >> stu[i].eng;stu[i].num = i + 1;stu[i].sum = stu[i].ch + stu[i].ma + stu[i].eng;}sort(stu, stu + n, cmp);for (int i = 0; i < 5; i++) {cout << stu[i].num << " " << stu[i].sum << endl;}return 0;
}

P1781 宇宙总统

宇宙总统 - 洛谷

题目

解答

思路

因为票数很大,位数很长,所以可以用一个字符串表示票数,先比较票数的位数,位数相同时比较字典序

代码

#include<iostream>
#include<string>
using namespace std;
typedef struct ren {int num;string piao;int len;
}ren;
int main() {ren r[22];int n;cin >> n;ren max;max.len = 0;for (int i = 0; i < n; i++) {r[i].num = i + 1;cin >> r[i].piao;r[i].len = r[i].piao.size();if (r[i].len > max.len) {max.len = r[i].len;max.num = r[i].num;max.piao = r[i].piao;}else if (r[i].len == max.len && r[i].piao>max.piao) {max.len = r[i].len;max.num = r[i].num;max.piao = r[i].piao;}}cout << max.num << endl;cout << max.piao << endl;return 0;
}

P2676 Bookshelf B

[USACO07DEC] Bookshelf B - 洛谷

题目

解答

思路

因为要使叠加的奶牛的数量最少,所以先选择身高高的奶牛叠加,故而将奶牛由高到低排序

代码

#include<iostream>
#include<algorithm>
using namespace std;
int N, B;
int H[20005];
bool cmp(int a, int b) {return a > b;
}
int main() {int ans = 0, sum = 0;cin >> N >> B;for (int i = 0; i < N; i++)cin >> H[i];sort(H, H + N, cmp);while (sum < B) {sum += H[ans];ans++;}cout << ans;return 0;
}

P1116 车厢重组

车厢重组 - 洛谷

题目

解答

思路

冒泡排序中,数值交换的次数

代码

#include<iostream>
using namespace std;
int main() {int N;int ans = 0;cin >> N;int t[10010];for (int i = 0;i < N;i++)cin >> t[i];for (int i = 0;i < N;i++) {for (int j = 0;j < i;j++) {if (t[j] > t[i])ans++;}}cout << ans << endl;return 0;
}

P1152 欢乐的跳

欢乐的跳 - 洛谷

题目

解答

思路

依次计算两个连续元素之间差的绝对值,排序,与 1 ~ n-1 比较

PS:第一次使用映射记录两个连续元素之间差的绝对值,但是没有通过,因为两个数之间的差可能比1000大,所以将差映射到0~1000的数组内,差大于1000的无法实现映射

代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
int a[1005];
int b[1005];
int main() {bool ans= true;cin >> n;for (int i = 0; i < n; i++)cin >> a[i];for (int i = 0; i < n - 1; i++)b[i] = abs(a[i] - a[i + 1]);sort(b, b + n - 1);for (int i = 0; i < n-1; i++) {if (b[i] != i + 1) {ans = false;break;}}if (ans)cout << "Jolly" << endl;elsecout << "Not jolly" << endl;return 0;
}

P1068 分数线划定

[NOIP2009 普及组] 分数线划定 - 洛谷

题目

解答

思路

根据要求排序,然后确定面试分数线,检查重分人员,重新计算实际进入面试的人数

代码

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int n, m;
typedef struct stu {int num;int grade;
}stu;
bool cmp(stu a, stu b) {if (a.grade == b.grade)return a.num < b.num;return a.grade > b.grade;
}
int main() {cin >> n >> m;stu s[5005];for (int i = 0; i < n; i++) cin >> s[i].num >> s[i].grade;int ans = floor(m * 1.5);//向下取整int ans_s = ans;sort(s, s + n, cmp);for (int i = ans; i < n; i++) {//判断是否有重分if (s[i].grade != s[ans - 1].grade)break;else ans_s++;}cout << s[ans - 1].grade << " " << ans_s << endl;for (int i = 0; i < ans_s; i++)cout << s[i].num << " " << s[i].grade << endl;return 0;
}

P5143 攀爬者

攀爬者 - 洛谷

题目

解答

思路

先根据 z 坐标将所有的点排序,然后依次通过所有点,并计算距离

代码

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int N;
typedef struct dian {int x;int y;int z;bool state = false;
}dian;
bool cmp(dian a, dian b) {return a.z < b.z;
}
double jvli(dian a, dian b) {int x = abs(a.x - b.x);int y = abs(a.y - b.y);int z = abs(a.z - b.z);double q = x * x + y * y + z * z;double p = pow(q, 0.5);return p;
}
int main() {double sum = 0;cin >> N;dian a[50005];for (int i = 0; i < N; i++) {cin >> a[i].x >> a[i].y >> a[i].z;}sort(a, a + N, cmp);for (int i = 0; i < N-1; i++) {sum += jvli(a[i], a[i + 1]);}printf("%.3lf", sum);return 0;
}

P1104 生日

生日 - 洛谷

题目

解答

思路

创建 学生 结构体,记录编号(根据输入顺序进行编号),姓名,出生年、月、日,依据题目要求对学生结构体数组中的每个元素排序

代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n;
typedef struct student {int num;string name;int y;int m;int d;
}student;
bool cmp(student a, student b) {if (a.y != b.y)return a.y < b.y;else {if (a.m != b.m)return a.m < b.m;else {if (a.d != b.d)return  a.d < b.d;elsereturn a.num > b.num;}}
}
int main() {cin >> n;student s[105];for (int i = 0; i < n; i++) {cin >> s[i].name >> s[i].y >> s[i].m >> s[i].d;s[i].num = i;}sort(s, s + n, cmp);for (int i = 0; i < n; i++) {cout << s[i].name << endl;}return 0;
}

P1012 拼数

[NOIP1998 提高组] 拼数 - 洛谷

题目

解答

思路

若要得到最大的整数,则需要 0~9 中的大数做高位,故而不是比较 ai 的大小,而是将 ai 作为字符串,比较字典序

现有 A 和 B,要使二者拼接后最大,则应该比较 A+B 与 B+A 的大小,据此对这 n 个整数进行排序,然后依次输出,即为 拼接后最大的整数

代码

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string s[25];
int n;
bool cmp(string a, string b) {return (a + b) > (b + a);
}
int main() {cin >> n;for (int i = 0; i < n; i++)cin >> s[i];sort(s, s + n, cmp);for (int i = 0; i < n; i++)cout << s[i];return 0;
}

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

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

相关文章

二.西瓜书——线性模型、决策树

第三章 线性模型 1.线性回归 “线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记. 2.对数几率回归 假设我们认为示例所对应的输出标记是在指数尺度上变化&#xff0c;那就可将输出标记的对数作为线性模型逼近的目标&#xff0c;即 由此&…

投简历这样投就对了

相关文章 写一份让HR过目不忘的简历 后悔没有早点发现这篇嵌入式简历模板 了解校招类型 投简历这样投就对了 前言一、线上投简历需要注意的东西1.线上APP投递简历&#xff08;以BOSS为例&#xff09;&#xff08;1&#xff09;填好个人信息&#xff08;2&#xff09;注意打招呼…

堆的结构实现与应用

目录 前言: 1.认识堆 a.如何认识堆&#xff1f; b.大根堆与小根堆 c.堆应用的简单认识 2.堆的结构与要实现的功能 3.向上调整算法 4.向下调整算法 5.向堆插入数据并建堆 6.堆的大小 7.堆的判空 8.取堆顶数据 9.删除堆顶数据 10.向上调整时间复杂度 11.向下调整时…

rtsp推拉流

1.搭建视频服务器 smart-rtmpd: smart_rtmpd 是一款 rtmp、rtsp 服务器&#xff0c;非常好用&#xff0c;解压既运行&#xff0c;支持跨平台&#xff0c;无任何依赖&#xff0c;性能和 SRS 相比不分上下 2.推拉流 下载windows版本ffmpeg,并设置环境变量. 推流 ffmpeg -re -st…

170基于matlab的DNCNN图像降噪

基于matlab的DNCNN图像降噪&#xff0c;网络分为三部分&#xff0c;第一部分为ConvRelu&#xff08;一层&#xff09;&#xff0c;第二部分为ConvBNRelu&#xff08;若干层&#xff09;&#xff0c;第三部分为Conv&#xff08;一层&#xff09;&#xff0c;网络层数为17或者20层…

制造业客户数据安全解决方案(终端安全/文件加密/介质管理等)

针对前文制造业客户数据安全解决方案&#xff08;数据防泄密需求分析&#xff09;提到的泄密风险&#xff0c;本文详细介绍一套完整、合理的解决方案&#xff0c;通过该方案构建公司数据安全防护边界&#xff0c;自动加密、全方位保护数据安全。 PC端&#xff1a;https://isite…

VUE2整合markdown编辑器 mavon-editor

GITEE文档 文档中详细介绍了自定义工具栏等 toolbars: {bold: true, // 粗体italic: true, // 斜体header: true, // 标题underline: true, // 下划线strikethrough: true, // 中划线mark: true, // 标记superscript: true, // 上角标subscript: true, // 下角标quote: true, …

大气颗粒物与VOCs PMF源解析实践技术应用

目前&#xff0c;大气颗粒物和臭氧污染成为我国亟待解决的环境问题。颗粒物和臭氧污染不仅对气候和环境有重要影响&#xff0c;而且对人体健康有严重损害。而臭氧的前体物之一为挥发性有机物&#xff08;VOCs&#xff09;。为了高效、精准地治理区域大气颗粒物和臭氧污染&#…

[corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape

前言 题目来源&#xff1a;竞赛官网 – 建议这里下载&#xff0c;文件系统/带符号的 vmlinux 给了 参考 [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape Exploiting poll_list Objects In The Linux Kernel – 原作者文章&#xff0c;poll_list 利用方式…

Linux 权限详解

目录 一、权限的概念 二、权限管理 三、文件访问权限的相关设置方法 3.1chmod 3.2chmod ax /home/abc.txt 一、权限的概念 Linux 下有两种用户&#xff1a;超级用户&#xff08; root &#xff09;、普通用户。 超级用户&#xff1a;可以再linux系统下做任何事情&#xff…

深信服技术认证“SCCA-C”划重点:深信服超融合HCI

为帮助大家更加系统化地学习云计算知识&#xff0c;高效通过云计算工程师认证&#xff0c;深信服特推出“SCCA-C认证备考秘笈”&#xff0c;共十期内容。“考试重点”内容框架&#xff0c;帮助大家快速get重点知识 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff08;S…

Shell 脚本系列 | shell三剑客

目录 1、三剑客介绍2、三剑客之—grep1. 常用参数2. 常用示例1.过滤以#开头的行和空白行2.找出所有的mp3文件包含艺术家jayZ&#xff0c;不包含remix3.计算匹配项的数目4.在匹配字符串周围打印出行5.匹配显示所有IP 3、三剑客之一sed1.常用参数2.常用示例1. 奇数行后增加2. 删除…

http协议工具:apache详解

目录 一、常见的http服务程序 1、 Apache HTTP Server 介绍 1.1 apache 概念 1.2 apache 功能 1.3 apache 特性 2、MPM&#xff08;multi-processing module&#xff09;工作模式 2.1 prefork 2.2 worker 2.3 event 二、Apache HTTP Server安装和相关文件 1、安装方…

MySQL|MySQL基础(求知讲堂-学习笔记【详】)

MySQL基础 目录 MySQL基础一、 MySQL的结构二、 管理数据库1&#xff09;查询所有的数据库2&#xff09;创建数据库3&#xff09;修改数据库的字符编码4&#xff09;删除数据库5&#xff09;切换操作的数据库 三、表的概念四、字段的数据类型4.1 整型4.2 浮点型(float和double)…

Linux密码重置不求人:三种方法教你轻松搞定普通用户密码更改

在Linux服务器管理中&#xff0c;为普通用户设置和管理密码是一项基础且重要的任务。通过为普通用户设置登录密码&#xff0c;可以确保系统的安全性和用户访问的合法性。本文将详细介绍在Linux系统中&#xff0c;如何通过三种不同的方法为普通用户设置登录密码。 Linux下&…

基于 java springboot+layui仓库管理系统

基于 java springbootlayui仓库管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…

c++类和对象新手保姆级上手教学(下)

目录 前言&#xff1a; 初始化列表&#xff1a; explicit关键字&#xff1a; static成员&#xff1a; 友元函数&#xff1a; 友元类&#xff1a; 内部类&#xff1a; 匿名对象&#xff1a; 前言&#xff1a; 类和对象下篇中剩余的部分较为简单易理解&#xff0c;认真记住…

PC端封装侧边导航

PC端封装侧边导航 template <div v-if"showBox false" class"leftShow" click.stop"toggleBox"></div><div class"container" :class"{ show: showBox, fixed: fixedBox }"><div class"arrow&qu…

《C++ Primer Plus》《7、函数——C++的编程模块》

文章目录 前言1复习函数的基本知识1.1定义函数1.2函数原型和调用函数 2函数的参数和按值传递2.1多个参数2.2另一个接受两个参数的函数 3函数和数组3.1函数如何用指针来处理数组3.2将数组作为参数意味着什么3.3更多的数组函数示例3.4使用数组区间的函数3.5指针和const 4函数和二…

【实时渲染】图形处理单元

介绍 早期的图像加速技术是使用三角形扫描&#xff0c;将这些扫描的颜色通过插值显示在屏幕上&#xff0c;而且也拥有访问数据的能力&#xff0c;将这些访问的数据通过插值显示在屏幕上 程序内部又加上了许多的可见性的像素检查&#xff0c;如深度测试等&#xff0c;由于这些过…