米子加油


私信TA

用户名:dotcpp0678296

访问量:858

签 名:

冲冲冲

等  级
排  名 3022
经  验 2062
参赛次数 0
文章发表 14
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

注意事项:

参考代码:

#include <iostream>

#include <algorithm>

using namespace std;

const int N = 1e5 + 5;

struct grade {

  int a, b, c;

  int ay, by, cy;

}g[N];

bool tmp1(grade x, grade y) {

  return x.ay > y.ay;

}

bool tmp2(grade x, grade y) {

  return x.by > y.by;

}

bool tmp3(grade x, grade y) {

  return x.cy > y.cy;

}

int main()

{

  long long n; cin >> n;

  for (int i = 1; i <= n; i++) cin >> g[i].a;

  for (int i = 1; i <= n; i++) cin >> g[i].b;

  for (int i = 1; i <= n; i++) cin >> g[i].c;


  //各国每次事件分别赢的分数

  for (int i = 1; i <= n; i++) 

  {

    g[i].ay = g[i].a - g[i].b - g[i].c;

    g[i].by = g[i].b - g[i].a - g[i].c;

    g[i].cy = g[i].c - g[i].a - g[i].b;

  }

  

  long long ag, bg, cg, aans, bans, cans, i;//用于做循环的条件 ag bg cg大于零才有资格累加分数

  sort(g + 1, g + 1 + n, tmp1);//根据每个国家赢的分数进行排序

  ag = g[1]. ay;

  i = 1;//i用于做下标

  aans = 0;//表示各国赢的次数

  while (ag > 0 && i < n) {

    i++;

    ag += g[i].ay;

    aans++;

  }


  sort(g + 1, g + 1 + n, tmp2);

  bg = g[1].by;

  i = 1;

  bans = 0;

  while (bg > 0 && i < n) {

    i++;

    bg += g[i].by;

    bans++;

  }


  sort(g + 1, g + 1 + n, tmp3);

  cg = g[1].cy;

  i = 1;

  cans = 0;

  while (cg > 0 && i < n) {

    i++;

    cg += g[i].cy;

    cans++;

  }

  //打印

  if (ag >= 0 && bg >= 0 && cg >= 0) cout << "-1";

  else cout << max(aans, max(bans, cans));

  return 0;

}


 

0.0分

2 人评分

  评论区

  • «
  • »