社区讨论
为什么用队列会RE??? 70分求调
P1309[NOIP 2011 普及组] 瑞士轮参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @m26ikuwn
- 此快照首次捕获于
- 2024/10/13 02:52 去年
- 此快照最后确认于
- 2025/11/04 17:20 4 个月前
CPP
#include <bits/stdc++.h>
#include <stdlib.h>
using namespace std;
struct dd {
int w;//武力
int s;//分
int p;//编号
} pe[200010];
queue<dd>win, los, k;
bool cmp(dd x, dd y) {
if (x.s > y.s) {
return true;
}
if (x.s == y.s && x.p < y.p ) {
return true;
}
return false;
}
int n = 0, r, q, a;
int main() {
cin >> n >> r >> q;
a = 2 * n;
for (int i = 1; i <= a; i++) {
cin >> pe[i].s;
pe[i].p = i;
}
for (int i = 1; i <= a; i++) {
cin >> pe[i].w;
}
sort(pe + 1, pe + a + 1, cmp);
for (int i = 1; i <= r; i++) {
for (int j = 2; j <= a; j += 2) {
if ((pe[j].w > pe[j - 1].w)) {
pe[j].s++;
win.push(pe[j]);
los.push(pe[j - 1]);
}
if (pe[j - 1].w > pe[j].w) {
pe[j - 1].s++;
los.push(pe[j]);
win.push(pe[j - 1]);
}
}
while (!win.empty() && !los.empty()) {
if (win.front().s > los.front().s) {
k.push(win.front());
win.pop();
}
if (win.front().s < los.front().s) {
k.push(los.front());
los.pop();
}
if (win.front().s == los.front().s) {
if (win.front().p > los.front().p) {
k.push(los.front());
los.pop();
} else {
k.push(win.front());
win.pop();
}
}
}
while (!win.empty()) {
k.push(win.front());
win.pop();
}
while (!los.empty()) {
k.push(los.front());
los.pop();
}
int aa = 1;
while (!k.empty()) {
pe[aa++] = k.front();
k.pop();
}
}
cout << pe[q].p ;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...