简单模拟题
方法一
首先按照题目要求我们先对总数进行降序排列,如果总数相同那么就把先出现的id排在其前面
其次我们把每个id所得到的分数存进一个数组里面,然后进行排序,最后我们只要输出第一个就行
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; struct node { int id, r, wh, b, sum; bool operator<(const node x) { if (sum != x.sum) return sum > x.sum; return id < x.id; } } w[maxn]; int main() { int n; while (~scanf("%d", &n)) { int cnt = 0; for (int i = 1; i <= n; ++i) { scanf("%d%d%d%d", &w[i].id, &w[i].r, &w[i].wh, &w[i].b); w[++cnt].sum = w[i].r + w[i].wh * 2 + w[i].b * 3; } sort(w + 1, w + cnt + 1); printf("%d %d\n", w[1].id, w[1].sum); } return 0; }
方法二
覆盖,我们用新值去覆盖老值,不断地更新两个变量,只要我们循环走了一遍,最后能求出我们想要的答案,这种方法极其简单,编码也非常方便,建议使用这种方法来编写代码
#include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 10; int main() { int n; while (~scanf("%d", &n)) { int id, x, y, z, sum = -1, ans, cnt; for (int i = 1; i <= n; ++i) { scanf("%d%d%d%d", &id, &x, &y, &z); cnt = x + y * 2 + z * 3; if (sum < cnt) { sum = cnt; ans = id; } } printf("%d %d\n", ans, sum); } }