AcWing 447. 瑞士轮
原题链接
简单
作者:
一块两毛五
,
2024-03-29 17:50:26
,
所有人可见
,
阅读 1
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 200010;
int n, r, q;
struct Player{
int id;
int score;
int w;
}player[N], win[N], lose[N];
bool cmp(Player a, Player b)
{
if(a.score == b.score)
return a.id < b.id;
else
return a.score > b.score;
}
int main()
{
cin >> n >> r >> q;
for(int i = 1; i <= 2 * n; i++)
{
cin >> player[i].score;
player[i].id = i;
}
for(int i = 1; i <= 2 * n; i++)
cin >> player[i].w;
sort(player + 1, player + 2 * n + 1, cmp);
while(r--)
{
for(int i = 1; i <= n; i++)
{
if(player[2 * i - 1].w > player[2 * i].w)
{
player[2 * i - 1].score++;
win[i] = player[2 * i - 1];
lose[i] = player[2 * i];
}
else{
player[2 * i].score++;
win[i] = player[2 * i];
lose[i] = player[2 * i - 1];
}
}
int i = 1, j = 1, k = 1;
while(i <= n && j <= n)
{
if(cmp(win[i], lose[j]))
player[k++] = win[i++];
else
player[k++] = lose[j++];
}
while(i <= n) player[k++] = win[i++];
while(j <= n) player[k++] = lose[j++];
}
cout << player[q].id;
return 0;
}