本文已参与「新人创作礼」活动,一起开启掘金创作之路。
链接
n个人每个人进行五场比赛,每场比赛有一个排名,如果一个人有至少三场比赛赢了另一个人,那么这个人对另一个人是胜利的。求n个人中可能产生的冠军是谁?
首先要明确两个人必须有一个人是胜者,比赛中不会出现两个胜利者的情况
按照比赛规则对所有人进行排序,第一个人就是可能产生的冠军。
然后对第一个人和后面的所有人进行判断,如果无法战胜所有的其他人的话,就不存在胜者
注意:如果胜者存在,排序后的第一个人一定是胜者
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int mod = 1e9 + 7;
void solve()
{
int n;
cin >> n;
vector<array<int, 6>> a(n + 1);
for(int i = 1; i <= n; i++)
{
for(int j = 0; j < 5; j++)
cin >> a[i][j];
a[i][5] = i;
}
sort(a.begin() + 1, a.end(), [](auto x, auto y){
int cnt = 0;
for(int i = 0; i < 5; i++)
cnt += (x[i] < y[i]);
return cnt >= 3;
});
bool is = true;
for(int i = 2; i <= n; i++)
{
int cnt = 0;
for(int j = 0; j < 5; j++)
cnt += (a[1][j] < a[i][j]);
if(cnt < 3) is = false;
}
cout << (is ? a[1][5] : -1) << "\n";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
// t = 1;
while(t--)
solve();
return 0;
}