洛谷P1104 生日 C++题解-编程题目及题解论坛-编程-擎雷博客

洛谷P1104 生日 C++题解

原题链接(洛谷):https://www.luogu.com.cn/problem/P1104

原题markdown:

# 生日

## 题目描述

cjf 君想调查学校 OI 组每个同学的生日,并按照年龄从大到小的顺序排序。但 cjf 君最近作业很多,没有时间,所以请你帮她排序。

## 输入格式

输入共有 $n + 1$ 行,

第 $1$ 行为 OI 组总人数 $n$;

第 $2$ 行至第 $n+1$ 行分别是每人的姓名 $s$、出生年 $y$、月 $m$、日 $d$。

## 输出格式

输出共有 $n$ 行,

即 $n$ 个生日从大到小同学的姓名。(如果有两个同学生日相同,输入靠后的同学先输出)

## 样例 #1

### 样例输入 #1

```
3
Yangchu 1992 4 23
Qiujingya 1993 10 13
Luowen 1991 8 1
```

### 样例输出 #1

```
Luowen
Yangchu
Qiujingya
```

## 提示

数据保证,$1<n<100$,$1\leq |s|<20$。保证年月日实际存在,且年份 $\in [1960,2020]$。

题解:

#include <bits/stdc++.h>

using namespace std;
const int N = 1e6 + 7;
struct People {
    int year;
    int month;
    int day;
    int id;
    string name;
} a[N];

bool cmpY(People p1, People p2) {
    return p1.year < p2.year;
}

bool id(People p1, People p2) {
    return p1.id > p2.id;
}

bool cmpM(People p1, People p2) {
    return p1.month < p2.month;
}

bool cmpD(People p1, People p2) {
    return p1.day < p2.day;
}

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i].name >> a[i].year >> a[i].month >> a[i].day;
        a[i].id = i;
    }
    stable_sort(a, a + n + 1, id);
    stable_sort(a, a + n + 1, cmpD);
    stable_sort(a, a + n + 1, cmpM);
    stable_sort(a, a + n + 1, cmpY);
    for (int i = 1; i <= n; i++)
        cout << a[i].name << endl;
}

 

请登录后发表评论

    没有回复内容