解题思路:
注意事项:
参考代码:
#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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复