首页 > 其他分享 >洛谷题单指南-排序-P1104 生日

洛谷题单指南-排序-P1104 生日

时间:2024-01-30 14:58:06浏览次数:28  
标签:P1104 int 洛谷题 s1 由小到大 年份 s2 排序

原题链接:https://www.luogu.com.cn/problem/P1104

题意解读:将学生按照年龄由大到小排序,如果年龄相同,后输入的排在前面,输出排序后的学生姓名。

解题思路:

此题是一个排序常规题,年龄大排在前说明年、月、日越小越在前面,核心的排序思路如下:

1、如果年份不同,按年份由小到大排序

2、如果年份相同,月份不同,按月份由小到大排序

3、如果年份、月份相同,日不同,按日由小到大排序

4、年、月、日都相同,输入靠后的排在前面

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 105;

struct Student
{
    int idx;
    string name;
    int y, m, d;
} s[N];

bool cmp(Student s1, Student s2)
{
    if(s1.y != s2.y) return s1.y < s2.y; //如果年份不同,按年份由小到大排序
    if(s1.m != s2.m) return s1.m < s2.m; //如果年份相同,月份不同,按月份由小到大排序
    if(s1.d != s2.d) return s1.d < s2.d; //如果年份、月份相同,日不同,按日由小到大排序
    return s1.idx > s2.idx; //年、月、日都相同,输入靠后的排在前面
}

int main()
{
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) 
    {
        s[i].idx = i; //记录每个学生的编号,以便按输入顺序排序
        cin >> s[i].name >> s[i].y >> s[i].m >> s[i].d;
    }

    sort(s + 1, s + n + 1, cmp);

    for(int i = 1; i <= n; i++) cout << s[i]. name << endl;
}

 

标签:P1104,int,洛谷题,s1,由小到大,年份,s2,排序
From: https://www.cnblogs.com/jcwy/p/17997089

相关文章

  • 洛谷题单指南-排序-P5143 攀爬者
    原题链接:https://www.luogu.com.cn/problem/P5143题意解读:给出一系列的点,按某种顺序经过所有点,计算距离。解题思路:如果小学生,可能对于三维坐标距离有些陌生,没关系,题目已经给出了计算公式,直接套公式即可,关键步骤如下:1、读取所有坐标点2、按高度值从小到大排序3、从头依次计算......
  • 31-ArrayList和HashMap集合的排序
     扩展:在List集合中添加另一个集合时,一般常用两种方法booleanadd(Ee): 将list作为一个元素添加到集合中booleanaddAll(Collection<?extends E> c):把list中的所有元素添加到集合中 ArrayList类的排序方法(常用)packagelist;importjava.util.ArrayList......
  • [转帖]SQL SERVER--- 排序规则、数据类型
    https://zhuanlan.zhihu.com/p/162933497 一、排序规则有时候我们向数据库插入文本时,会出现乱码“?”,这时有可能是我们创建数据库没有设置好排序规则以Chinese_PRC_CI_AS为例前半部分Chinese_PRC指的是针对大陆简体字unicode的排序规则后半部分的含义为:_BIN二进......
  • 洛谷题单指南-排序-P1068 [NOIP2009 普及组] 分数线划定
    原题链接:https://www.luogu.com.cn/problem/P1068题意解读:根据题意,用模拟法,求出分数线所在位置,然后计算分数线,最后输出结果即可。解题思路:1、分数线是按从大到小排名来设定,因此数据因为按照分数从大到小排序,如果分数相同,需要安装报名号从小到大排序2、计算分数线位置,主要是下......
  • 洛谷题单指南-排序-P1152 欢乐的跳
    原题链接:https://www.luogu.com.cn/problem/P1152题意解读:要判断相邻数差的绝对值是否覆盖1~n-1,只需遍历相邻两数之差,借助数组标记差的绝对值是否存在,然后遍历数组即可。解题思路:此题有两个注意点:1、数值要用longlong2、计算差值绝对值后,标记桶数组时,有可能导致越界,因为每个......
  • 洛谷题单指南-排序-P2676 [USACO07DEC] Bookshelf B
    原题链接:https://www.luogu.com.cn/problem/P2676题意解读:要使能够到书架顶的牛数量最少,优先选高的牛即可,直到总身高超过书架高度,简单的排序+贪心,下面给出代码。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=20005;inth[N];intn,b;intmain......
  • 洛谷题单指南-排序-P1781 宇宙总统
    原题链接:https://www.luogu.com.cn/problem/P1781题意解读:题目思路非常简单,在n个投票数中选最大的,并记录其编号即可,由于投票数很大,无法直接用整形,需要通过string来进行数字比较。解题思路:本题的关键在于如何比较string数字的大小?在高精度减法时,需要判断两个数的大小,用大数减小......
  • C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)
    #include<iostream>#include<fstream>#include<string>#include<vector>#include<algorithm>usingnamespace::std;classSolution{public: //直接插入排序 voidinsertsort(vector<int>&num){ for(inti=1;i<num......
  • 洛谷题解-[ABC286E] Souvenir
    https://www.luogu.com.cn/problem/AT_abc286_e题目描述NNN個の都市があり、いくつかの相異なる都市の間は一方通行の直行便によって移動することができます。どの直行便が存在するかはNNN個の長さNNNの文字列S1,S2,…,SNS_1,S_2,\ldots,S_NS1​,S2​,…,SN​......
  • 冒泡排序(2)
    #include<iostream>usingnamespacestd;structka{ stringname; intage; stringxin;};intmain(){ kaa[5]; kat; for(inti=0;i<5;i++){ cin>>a[i].name>>a[i].age>>a[i].xin; } for(inti=0;i<5;i++){for(int......