AcWing 3375. 成绩排序

2023-11-06

题目

题目链接3375. 成绩排序

思路

思路要求稳定排序或者特判的快排
写法一:写两个sort中的比较函数的参数cmp
写法二:直接在结构体中进行比较
写法三:归并排序

代码1:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1100;
int n, k;

struct student{
    string name;
    int score, id;
}stu[N];

bool cmp0(student a, student b){
    if(a.score != b.score) return a.score > b.score;
    else return a.id < b.id;
}

bool cmp1(student a, student b){
    if(a.score != b.score) return a.score < b.score;
    else return a.id < b.id;
}

int main(){
    cin >> n >> k;
    for(int i = 0; i < n; i ++) cin >> stu[i].name >> stu[i].score, stu[i].id = i;
    sort(stu, stu + n, k ? cmp1 : cmp0);
    for(int i = 0; i < n; i ++) cout << stu[i].name << ' ' << stu[i].score << endl;
}

代码2

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1100;
int n, k;

struct Node{
    int score, id;
    string name;
    bool operator< (const Node & a) const{
        if(score == a.score) return id < a.id;
        return k ? score < a.score : score > a.score;
    }
}stu[N];

int main(){
    cin >> n >> k;
    for(int i = 0; i < n; i ++) cin >> stu[i].name >> stu[i].score, stu[i].id = i;
    sort(stu, stu + n);
    for(int i = 0; i < n; i ++) cout << stu[i].name << ' ' << stu[i].score << endl;
}

代码3

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1100;

int n, t;

struct{
    string name;
    int score;
}stu[N], tmp[N];

void mergeSort(int l, int r){
    if(l >= r) return ;
    int mid = l + r >> 1;
    mergeSort(l, mid), mergeSort(mid + 1, r);
    int i = l, j = mid + 1, k = 0;
    while(i <= mid && j <= r){
        tmp[k ++] = ((t && stu[i].score <= stu[j].score) || (!t && stu[i].score >= stu[j].score)) ? 
        stu[i ++] : stu[j ++];
    }
    while(i <= mid) tmp[k ++] = stu[i ++];
    while(j <= r) tmp[k ++] = stu[j ++];
    for(int i = l, j = 0; i <= r; i ++, j ++) stu[i] = tmp[j];
}

int main(){
    cin >> n >> t;
    for(int i = 0; i < n; i ++) cin >> stu[i].name >> stu[i].score;
    mergeSort(0, n - 1);
    for(int i = 0; i < n; i ++) cout << stu[i].name << ' ' << stu[i].score << endl;
}

AcWing题解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AcWing 3375. 成绩排序 的相关文章

  • noip2007 奖学金 (排序)

    A1159 奖学金 时间限制 1 0s 内存限制 256 0MB 总提交次数 797 AC次数 339 平均分 60 95 将本题分享到 查看未格式化的试题 提交 试题讨论 试题来源 NOIP2007 普及组 问题描述 某小学最近得到了一笔
  • 【每日一题】排序子序列(贪心)

    题目来源 牛客网 链接 排序子序列 题目描述 牛牛定义排序子序列为一个数组中一段连续的子序列 并且这段子序列是非递增或者非递减排序的 牛牛有一个长度为n的整数数组A 他现在有一个任务是把数组A分为若干段排序子序列 牛牛想知道他最少可以把这个
  • C语言--库函数qsort排序

    文章目录 一 C语言 库函数qsort排序 1 1 冒泡排序 1 2 qsort排序 二 模拟实现qsort函数 一 C语言 库函数qsort排序 假设我们要对一个数组元素进行排序 如果是一个整型数组 我们首先可以想到的是冒泡排序 但其实C
  • 【TreeMap】-根据 key 或 value 排序

    1 根据 key 排序 引言 TreeMap 中key 可以自动对 String 类型或8大基本类型的包装类型进行排序 但是 TreeMap 无法直接对自定义类型进行排序 当我们想对对 TreeMap 中 key 中的自定义类型排序时 必须
  • elasticsearch地理位置总结

    参考 https blog csdn net tang jian dong article details 104446526 https blog csdn net u013041642 article details 94416631
  • AcWing167. 木棒(DFS+剪枝)

    输入样例 9 5 2 1 5 2 1 5 2 1 4 1 2 3 4 0 输出样例 6 5 解析 DFS 搜索顺序 根据木棒的长度从小到大枚举每根木棒 对于每根木棒 枚举可以由哪些木棍拼成 如果所有的木棍拼成了长度相等的多个木棒 说明找到了
  • Basic Level 1055 集体照 (25分)

    题目 拍集体照时队形很重要 这里对给定的 N 个人 K 排的队形设计排队规则如下 每排人数为 N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为 m 2 1 其中 m 为该排人数
  • 对所有数据类型可通用的快速排序算法

    1 引子 快速排序算法可能是最优秀的排序算法了 此算法是1960年C A Hoare发明出来的 它被列为20世纪十大算法之一 快速排序也属于广义上的冒泡排序 这是简单冒泡排序法的优化升级 两者都是通过比较大小 交换元素来排序的 不过它增大了
  • 数据结构中内部排序的各种比较

    排序算法中的稳定和不稳定指的是什么 若在待排序的纪录中 存在两个或两个以上的关键码值相等的纪录 经排序后这些记录的相对次序仍然保持不变 则称相应的排序方法是稳定的方法 否则是不稳定的方法 内部排序和外部排序 根据排序过程中涉及的存储器不同
  • 真正帮你实现—MapReduce统计WordCount词频,并将统计结果按出现次数降序排列

    项目整体介绍 对类似WordCount案例的词频统计 并将统计结果按出现次数降序排列 网上有很多帖子 均用的相似方案 重写某某方法然后 运行起来可能会报这样那样的错误 这里实现了一种解决方案 分享出来供大家参考 编写两个MapReduce程
  • 487. 金明的预算方案

    Powered by NEFU AB IN Link 文章目录 487 金明的预算方案 题意 思路 代码 487 金明的预算方案 题意 略 思路 可以将每个主件及其附件看作一个物品组 记主件为 p 两个附件为 a b 则最多一共有4种组合
  • AcWing 1055. 股票买卖 II

    输入样例1 6 7 1 5 3 6 4 输出样例1 7 输入样例2 5 1 2 3 4 5 输出样例2 4 输入样例3 5 7 6 4 3 1 输出样例3 0 样例解释 样例1 在第 2 天 股票价格 1 的时候买入 在第 3 天 股票价格
  • 八大排序总结---- 数据结构 (图解法) 面试必会! ! !

    八大排序总结 目录 一 插入排序 InsertSort 二 希尔排序 ShellSort 三 选择排序 SelectSort 四 堆排序 HeapSort 五 冒泡排序 BubbleSort 六 快速排序 QuickSort 1 hoare
  • 243. 一个简单的整数问题2(树状数组)

    输入样例 10 5 1 2 3 4 5 6 7 8 9 10 Q 4 4 Q 1 10 Q 2 4 C 3 6 3 Q 2 4 输出样例 4 55 9 15 解析 一般树状数组都是单点修改 区间查询或者单点查询 区间修改 这道题都是区间操作
  • 泛型是实体类的集合,根据某一字段排序

    举例 List
  • AcWing题解

    104 货仓选址 417 不高兴的津津 421 陶陶摘苹果 425 明明的随机数 429 奖学金 441 数字统计 445 数字反转 449 质因数分解 680 剪绳子 756 蛇形矩阵 1381 阶乘 3208 Z字形扫描 3375 成绩
  • AcWing 1227. 分巧克力(二分)

    输入样例 2 10 6 5 5 6 输出样例 2 include
  • Acwing790.数的三次方根

    解题思路 include
  • AcWing 1247. 后缀表达式

    老师的讲课网址 https www acwing com video 736 第二个图就已经告诉我们只要有一个减号 我们就可以组成至少含一个减号的所有组合 比如说一个减号三个加号我们可以组合成 1 2 3 4 所以代码如下 include
  • 【100%通过率 】【华为OD机试c++\python】组合出合法最小数【2023 Q1 A卷

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给一个数组 数组里面都是代表非负整数的字符串 将数组里所有的数值排列组合拼接起来组成一个数字 输出拼接成的最小的数字 输入描述 一个数组 数组不

随机推荐