可以发现 行和列是不相关的 所以只用单独考虑行和列就行,取最大值,在按编号排序
#include<iostream> #include<algorithm> using namespace std; int ans1[10010],ans2[10010]; struct node { int i; int num; }hang[10010],lie[10010]; bool cmp(node a,node b) { return a.num>b.num; } int main() { int n,m,k,l,d; cin>>n>>m>>k>>l>>d; for(int i=1;i<=max(n,m);i++) hang[i].i=i,lie[i].i=i; while(d--) { int x1,x2,y1,y2; cin>>x1>>y1>>x2>>y2; if(x1==x2)lie[y1+y2>>1].num++; else hang[x1+x2>>1].num++; } sort(hang+1,hang+n+1,cmp); sort(lie+1,lie+m+1,cmp); for(int i=1;i<=k;i++)ans1[i]=hang[i].i; for(int i=1;i<=l;i++)ans2[i]=lie[i].i; sort(ans1+1,ans1+1+k); sort(ans2+1,ans2+1+l); for(int i=1;i<=k;i++) cout<<ans1[i]<<' '; cout<<endl; for(int i=1;i<=l;i++) cout<<ans2[i]<<' '; cout<<endl; }