解题思路:
注意事项:
参考代码:
#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语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:900 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2098 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:467 |
WU-printf基础练习2 (C++代码)浏览:2061 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:804 |
用筛法求之N内的素数。 (C语言代码)浏览:890 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
Cylinder (C语言描述+详细分析)浏览:3374 |
sizeof的大作用 (C语言代码)浏览:1590 |
Hello, world! (C语言代码)浏览:766 |