10分求助!QWQ

P5740 【深基7.例9】最厉害的学生

@[feizhu0130](/user/987924) 1. 首先你这个排序不对。这个排序需要保证总分数从大到小,所以应该是: `return q.zong > h.zong;` 按照你的写法,那么你的 `cmp` 函数返回值就永远都是 `false` 了,这个不对。 2. 其次,对于总分相同时,这题要求按照先后顺序排序,所以需要在结构体中再加入一个 `id` 来保证先后顺序。 所以正确的 `cmp` 的写法是: ```cpp bool cmp(node q, node h) { if(q.zong != h.zong) return q.zong > h.zong; return q.id < h.id; } ```
by ShiRoZeTsu @ 2023-12-27 20:54:38


这、 ```cpp if(q.zong>=h.zong) return q.zong<h.zong; ```
by Lcx_AK_IOI @ 2023-12-27 20:55:14


感谢大佬纠错(^W^)!!!
by feizhu0130 @ 2023-12-27 21:08:30


主要是学结构体排序时没学好
by feizhu0130 @ 2023-12-27 21:10:13


@[feizhu0130](/user/987924) 小于号就从小到大排,大于号就从大到小排,直接返回就 OK 的。
by ShiRoZeTsu @ 2023-12-27 21:13:42


二次求助,90分,求纠错(QWQ) ```cpp #include<bits/stdc++.h> using namespace std; struct node { string name; int yu,shu,ying,zong,id; }; bool cmp(node q,node h) { if(q.zong!=h.zong) return q.zong>h.zong; else return q.id<h.id; } node a[10005]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].name>>a[i].yu>>a[i].shu>>a[i].ying; a[i].zong=a[i].yu+a[i].shu+a[i].ying; } sort(a+1,a+1+n,cmp); cout<<a[1].name<<" "<<a[1].yu<<" "<<a[1].shu<<" "<<a[1].ying<<" "; return 0; } ```
by feizhu0130 @ 2023-12-27 21:14:24


@[feizhu0130](/user/987924) 这个 id 的意思是输入的顺序,因为当相同分数出现时要保证输出最前面那个,也就是 id 最小的。 孩子,id 你得初始化呀 /doge 可以参考我的 ```cpp #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int maxn = 1e3 + 5; int n; struct node { string name; int val, id, x, y, z; } a[maxn]; int main() { cin >> n; for(int i = 1; i <= n; i++) { cin >> a[i].name >> a[i].x >> a[i].y >> a[i].z; a[i].val = a[i].x + a[i].y + a[i].z; //看这里 a[i].id = i; } sort(a+1, a+1+n, [](node x, node y) { if(x.val != y.val) return x.val > y.val; return x.id < y.id; }) ; cout << a[1].name << ' ' << a[1].x << ' ' << a[1].y << ' ' << a[1].z << '\n'; return 0; } ```
by ShiRoZeTsu @ 2023-12-27 21:16:09


十分感谢,AC了
by feizhu0130 @ 2023-12-27 21:18:28


|