解题思路:

注意事项:

参考代码:

#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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论