如果你用三目WA了并且0pts
查看原帖
如果你用三目WA了并且0pts
576378
creation_hy楼主2022/9/23 19:09

三目闭坑指南

三目运算符的优先级比逗号还高!!!所以如果你是这么写的:

#include <bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int>> gq;
priority_queue<int, vector<int>, less<int>> lq;
int n, x;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> x;
    lq.push(x);
    cout << x << '\n';
    for (int i = 2; i <= n; i++)
    {
        cin >> x;
        x > lq.top() ? gq.push(x) : lq.push(x);
        while (labs(lq.size() - gq.size()) > 1)
            lq.size() > gq.size() ? gq.push(lq.top()), lq.pop() : lq.push(gq.top()), gq.pop();
        if (i & 1)
            cout << (lq.size() > gq.size() ? lq.top() : gq.top()) << '\n';
    }
    return 0;
}

请改成:

#include <bits/stdc++.h>
using namespace std;
priority_queue<int, vector<int>, greater<int>> gq;
priority_queue<int, vector<int>, less<int>> lq;
int n, x;
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> x;
    lq.push(x);
    cout << x << '\n';
    for (int i = 2; i <= n; i++)
    {
        cin >> x;
        x > lq.top() ? gq.push(x) : lq.push(x);
        while (labs(lq.size() - gq.size()) > 1)
            lq.size() > gq.size() ? (gq.push(lq.top()), lq.pop()) : (lq.push(gq.top()), gq.pop()); //加括号!!
        if (i & 1)
            cout << (lq.size() > gq.size() ? lq.top() : gq.top()) << '\n';
    }
    return 0;
}

因为如果这么写:

cmp ? a, b: c, d;

实际上和这个是等效的:

cmp ? a;
b: c;
d;

未定义行为了属于是(

2022/9/23 19:09
加载中...