链接:
https://codeforces.com/problemset/problem/1552/B
题意:
有n名运动员,每名运动员跑5次马拉松,记录5次名次,如果一名运动员的5次排名中有至少三次小于另一名运动员,则说这名运动员比另外一名运动员强。我们需要找到最强的运动员。
本题只需要开循环,比较每一名运动员,如果有运动员比此时记录的最强运动员强,就让他成为最强运动员。循环一遍后,因为此时得到的最强运动员还未和他前面的运动员做过比较,所以要再开一次循环,让他和这些运动员再做一次比较,如果他仍是最强运动员,则证明他真的是最强运动员,但如果不是,那么说明这些运动员里,没有最强运动员。
代码如下:
#include<iostream>
#include<string>
#include<string.h>
using namespace std;
typedef long long ll;
int r[50003][5];
int main() {int T;cin >> T;while (T--) {int n;cin >> n;for (int i = 1; i <= n; i++) {for (int j = 0; j < 5; j++) {cin >> r[i][j];}}int athlete = 1;for (int i = 2; i <= n; i++) {int cnt = 0;for (int j = 0; j < 5; j++) {if (r[athlete][j] < r[i][j]) {cnt++;}}if (cnt < 3) {athlete = i;}}int ans = athlete;for (int i = 1; i <= n; i++) {if (i == athlete) continue;else {int cnt = 0;for (int j = 0; j < 5; j++) {if (r[athlete][j] < r[i][j]) {cnt++;}}if (cnt < 3) {ans = -1;break;}}}cout << ans;cout << endl;}
}