思路

思路其实很简单
竖着看 , 哪一行交头最多, 取前面的 K 个 横着的 , 哪一列交头最多, 取前面的 L 个


在输入的时候, 统计好数量, 然后排序即可


对了 最后输出, 要顺序输出一下, 这里记得别忘了 (我说怎么不能全部ac)

ac 代码

#include <bits/stdc++.h>
using namespace std;
// const int N =1e5+10;
const int inf = INT_MAX;
typedef pair<int, int> pii;
typedef priority_queue<int, vector<int>, greater<int>> small_heap;
#define int long long
int32_t main()
{
    int M, N, K, L, D;
    cin >> M >> N >> K >> L >> D;
    map<int, int> col, row;

    while (D--)
    {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        if (x1 == x2)
            col[min(y1, y2)]++;
        else if (y1 == y2)
            row[min(x1, x2)]++;
    }
    vector<pii> col_v(col.begin(), col.end());
    vector<pii> row_v(row.begin(), row.end());

    sort(col_v.begin(), col_v.end(), [](const pii &a, const pii &b)
         { return a.second > b.second; });
    sort(row_v.begin(), row_v.end(), [](const pii &a, const pii &b)
         { return a.second > b.second; });

    vector<int> ans1 ,ans2;
    for (int i = 0; i < K; i++)
    {
        ans1.push_back(row_v[i].first);
        // cout << row_v[i].first << ' ';
    }
    sort(ans1.begin() , ans1.end());
    for (auto &t :  ans1)cout << t <<" ";
    cout << endl;
    for (int i = 0; i < L; i++)
    {
        ans2.push_back(col_v[i].first);
        // cout << col_v[i].first << " ";
    }
    sort(ans2.begin() ,ans2.end());
    for (auto & t : ans2 ) cout << t <<" ";
    return 0;
}