洛谷 【算法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://xiahunao.cn/news/2804243.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

概率密度函数(PDF)与神经网络中的激活函数

原创:项道德(daode3056,daode1212) 在量子力学中&#xff0c;许多现象都是统计的结果&#xff0c;基本上用的是正态分布&#xff0c;然而&#xff0c;从本质上思考&#xff0c;应该还存在低阶的分布&#xff0c;标准的正态分布是它的极限&#xff0c;这样一来&#xff0c;或许在…

《论文阅读》通过识别对话中的情绪原因来提高共情回复的产生 EMNLP 2021

《论文阅读》通过识别对话中的情绪原因来提高共情回复的产生 EMNLP 2021 前言简介方法实现Emotion ReasonerResponse Generator实验结果示例总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Improv…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题&#xff0c;双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决&#xff1a; 合并两个有序链表&#xff1a; 使用两个指针分别指向两个链表的头部&#xff0c;逐一比较节点的值&#xff0c;将较小的节点链接到结果链表…

【ECharts】调用接口获取后端数据的四种方法

使用eacharts做大屏&#xff0c;需要使用后端数据&#xff0c;下面的方法是自己试过有效的&#xff0c;有什么不对的&#xff0c;望各位大佬指点。 目录 方法一&#xff1a;在mounted中使用定时器调用eacharts方法&#xff08;定时器可以获取到data中的数据&#xff09; 方法…

图解李白的“朋友圈”

《长安三万里》作为2023年票房第一的国漫电影&#xff0c;以安史之乱为背景&#xff0c;从诗人高适的视角铺设了一幅绚丽的历史长卷&#xff0c;细细讲述“诗仙”李白跌宕起伏的一生&#xff0c;以及大唐盛世一路荣耀幻灭的唏嘘。同时&#xff0c;在这部动画电影中出现了多位大…

CP04大语言模型ChatGLM3-6B特性代码解读(2)

CP04大语言模型ChatGLM3-6B特性代码解读&#xff08;2&#xff09; 文章目录 CP04大语言模型ChatGLM3-6B特性代码解读&#xff08;2&#xff09;构建对话demo_chat.py定义client对象与LLM进行对话 构建工具调用demo_tool.py定义client对象定义工具调用提示词定义main&#xff0…

接口测试需求分析

测试接口的时候&#xff0c;可能很多人都会想&#xff0c;按着研发给的接口协议文档来测&#xff0c;不就好了吗&#xff1f; 其实&#xff0c;对于接口的测试&#xff0c;还需要有点深度的需求分析&#xff0c;然后再进行对应的测试。对于接口测试&#xff0c;这里有个不太详…

利用nginx内部访问特性实现静态资源授权访问

在nginx中&#xff0c;将静态资源设为internal&#xff1b;然后将前端的静态资源地址改为指向后端&#xff0c;在后端的响应头部中写上静态资源地址。 近期客户对我们项目做安全性测评&#xff0c;暴露出一些安全性问题&#xff0c;其中一个是有些静态页面&#xff08;*.html&…

Android 开发一个耳返程序(录音,实时播放)

本文目录 点击直达 Android 开发一个耳返程序程序编写1. 配置 `AndroidManifast.xml`2.编写耳返管理器3. 录音权限申请4. 使用注意最后我还有一句话要说怕相思,已相思,轮到相思没处辞,眉间露一丝Android 开发一个耳返程序 耳返程序是声音录入设备实时播放的一种程序,理论上…

XFF伪造 [MRCTF2020]PYWebsite1

打开题目 直接查看源码 看到一个./flag.php 访问一下 购买者的ip已经被记录&#xff0c;本地可以看到flag&#xff0c;那么使用xff或者client-ip伪造一下ip试试 bp抓包 加一个X-Forwarded-For头 得到flag

关于git子模块实践(一)

背景 在日常项目开发中&#xff0c;随着项目的迭代&#xff0c;不可避免的是主项目会引入到很多三方库&#xff0c;或者自研的一些模块。有一种场景&#xff0c;就是这些模块&#xff0c;是随着开发而进行迭代&#xff0c;且多个项目公用的&#xff0c;这种情况&#xff0c;在…

探讨javascript中运算符优先级

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 深入理解JavaScript运算符优先级运算符优先级概述示例演示示例1&#xff1a;加法和乘法运算符的优先级示…

86、移除推理路径上的所有内存操作

动态申请内存的影响,前两节已经介绍过了,细心的朋友可能会发现,在使用 C++实现的 resnet50 代码中,还存在一处动态申请内存的操作。 那就是对于每一层的输入或输出 feature map 数据进行内存申请,比如在 3rd_preload/ops/conv2d.cc 文件中,卷积的计算中存在对于输出 fea…

MaxScale实现mysql8读写分离

MaxScale 实验环境 中间件192.168.150.24MaxScale 22.08.4主服务器192.168.150.21mysql 8.0.30从服务器192.168.150.22mysql 8.0.30从服务器192.168.150.23mysql 8.0.30 读写分离基于主从同步 1.先实现数据库主从同步 基于gtid的主从同步配置 主库配置 # tail -3 /etc/my.…

Aigtek电压放大器的应用场合有哪些

电压放大器是一种主要用于信号处理的重要电子设备&#xff0c;它可以将输入的低电压信号放大到较高的输出电压水平。在各个应用领域中&#xff0c;电压放大器发挥着重要的作用。下面西安安泰点击将介绍电压放大器的应用场合。 通信系统&#xff1a;电压放大器在通信系统中具有重…

ant-design-charts 对带缩略轴柱状图 根据数据自定义列处理, 以颜色为例

摘要 本文主要对ant-design-charts中带缩略柱状图进行自定义列处理 ant-design-charts版本&#xff1a;1.4.2 1、定义数据 const data1 [{"a": "七台河","b": 52827.32,c: 2},{"a": "万县","b": 20000,c: 1},…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响

文章目录 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 LLVM优化效果不仅依赖于数据库内部具体的实现&#xff0c;还与当前所选择的硬件环境等有关。 表达式调用C…

Ubuntu 20.04.1 共享samba给windows 10

通过ssh登录ubuntu&#xff0c;修改/etc/下的smb配置文件&#xff0c; uidq4932hzh57415u:/work$ cat /etc/samba/smb.conf [global] security ads realm V01.NET workgroup V01 idmap uid 10000-20000 idmap gid 10000-20000 winbind enum users yes winbind enum grou…

pandas/geopandas 笔记:判断地点在不在路网上 不在路网的点和路网的距离

0 导入库 import osimport pandas as pd pd.set_option(display.max_rows,5)import osmnx as oximport geopandas as gpd from shapely.geometry import Point 1 读取数据 假设我们有 如下的数据&#xff1a; 1.1 新加坡室外基站位置数据 cell_stationpd.read_csv(outdoor…