题目: [NOIP2011 普及组] 瑞士轮
题目原文请移步下面的链接
OI
、模拟
、递归
、排序
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';
void best_coder();
void happy_coder();
int main() {
// 小码匠
best_coder();
// 最优解
//happy_coder();
return 0;
}
int cmp(pair<int, int> a, pair<int, int> b) {
if (a.first == b.first) {
return a.second < b.second;
}
return a.first > b.first;
}
void best_coder() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, r, q;
cin >> n >> r >> q;
n *= 2;
vector<pair<int, int>> s(n);
vector<int> w(n);
vector<pair<int, int>> a(n / 2);
vector<pair<int, int>> b(n / 2);
for (int i = 0; i < n; ++i) {
cin >> s[i].first;
s[i].second = i;
}
for (int i = 0; i < n; ++i) {
cin >> w[i];
}
sort(s.begin(), s.end(), cmp);
for (int i = 0; i < r; ++i) {
for (int j = 0; j < n; j += 2) {
if (w[s[j].second] > w[s[j + 1].second]) {
++s[j].first;
a[j / 2] = s[j];
b[j / 2] = s[j + 1];
} else {
++s[j + 1].first;
a[j / 2] = s[j + 1];
b[j / 2] = s[j];
}
}
merge(a.begin(), a.end(), b.begin(), b.end(), s.begin(), cmp);
}
cout << s[q - 1].second + 1;
}
void happy_coder() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
}
END