简单模拟题

方法一

  • 首先按照题目要求我们先对总数进行降序排列,如果总数相同那么就把先出现的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);
    }
}