思路
思路其实很简单
竖着看 , 哪一行交头最多, 取前面的 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;
}