16分求助

P1104 生日

```cpp #include <bits/stdc++.h> using namespace std; struct node { int y, m, d, pm; string name; }a[110]; bool cmp(node x, node 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; } int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].name >> a[i].y >> a[i].m >> a[i].d; a[i].pm = i; } sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { cout << a[i].name << endl; } return 0; } ```
by wzj0829 @ 2023-09-09 20:44:56


My AC Code,结构体排序,应该能看懂吧
by wzj0829 @ 2023-09-09 20:45:36


从你的代码来看的话问题确实不大,但是从测评记录上来看的话大概是排序的问题,这里我觉得是你的cmp的问题,可以把if分开写,因为这是一个函数return之后就没了,所以if一个return一个
by only__one @ 2023-09-09 20:48:02


首先是逻辑问题,应该是年份,月份小的的年龄大,也就是把结构体判断else中大于改为小于;其次是第十行应该是a.ri==b.ri
by MJLY @ 2023-09-09 21:34:01


@[Real_Luka_Modric](/user/671139) AC代码: ```cpp #include <bits/stdc++.h> using namespace std; struct node { int y, m, d, pm; string name; }a[110]; bool cmp(node x, node 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; } int main() { int n; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i].name >> a[i].y >> a[i].m >> a[i].d; a[i].pm = i; } sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { cout << a[i].name << endl; } return 0; } ```
by ai_inan @ 2023-09-10 21:59:22


|