全wa了,找到天荒地老了,还没找到错误,无奈之下只能求助大佬了

P1104 生日

lmjq12 @ 2023-10-24 21:00:02

#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
int n;
struct body
{
    string name;
    int y, m, d,l;
}h[105];
bool cmp(body a, body b)
{
    if (a.y != b.y) return a.y < a.y;
    else
    {
        if (a.m != b.m) return a.m < a.m;
        else if (a.m == b.m && a.d != b.d) return a.d < b.d;
        else if (a.m == b.m && a.d == b.d) return a.l > b.l;
    }
}
int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> h[i].name >> h[i].y >> h[i].m >> h[i].d;
        h[i].l = i;
    }
    stable_sort(h, h + n, cmp);
    for (int i = 0; i < n; i++)
    {
        cout << h[i].name << endl;
    }
    return 0;
}

by only_a_speaker @ 2023-10-24 21:09:35

您好,在比较函数中,请勿将 a 自己的年份与自己比较。

同时,由于您的比较函数已经唯一确定了元素间的大小顺序,所以此处 stable_sort 是不必要的,直接使用 sort 为最佳。

另外还需注意,在比较函数里的判断存在冗余判断。例如,在已经判断完月份不等之后,在另一分支还在判断月份相等,这是不必要的。


by lmjq12 @ 2023-10-24 21:35:36

@only_a_speaker 多谢大佬


|