80分,调了wa的样例答案是对的,为啥??

P1104 生日

Camelliail @ 2024-02-13 22:35:22

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

/*P1104 生日*/
struct oi {
    string s;
    int y, m, d;
}a[105];

bool cmp(oi a, oi b) {
    if (a.y < b.y) return true;
    else if (a.y == b.y && a.m < b.m) return true;
    else if (a.y == b.y && a.m == b.m && a.d < b.d) return true;
    else return false;
}
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i].s >> a[i].y >> a[i].m >> a[i].d;
    }
    sort(a + 1, a + 1 + n, cmp);
    for (int i = 1; i <= n; ++i) {
        cout << a[i].s << endl;
    }
    return 0;
}

by OIerWu_829 @ 2024-02-13 22:41:15

@Camelliail

其实有点不懂你这个 cmp 函数,给你推荐一个写法。

还有一个点,你好像没有注意到?

如果有两个同学生日相同,输入靠后的同学先输出。

bool cmp(oi x, oi y) {
    if (x.y != y.y) return x.y < y.y;
    if (x.m != y.m) return x.m < y.m;
    if (x.d != y.d) return x.d < y.d;
    return x.pm > y.pm; // 输入顺序
}

by Camelliail @ 2024-02-13 22:46:12

@wzj0829 刚刚那个点没注意到,已经过啦!谢谢大佬!!!


|