当前位置: 代码迷 >> 综合 >> codeforces 1552B Running for Gold
  详细解决方案

codeforces 1552B Running for Gold

热度:86   发布时间:2023-12-02 23:18:50.0

链接:

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;}
}

  相关解决方案