这道题用贪心,我们先用结构体用来记录哪一行(pos)或列(pos)需要隔离,这条隔离带隔离了多少个(num)

1、先是通过给出两同学的坐标判断是隔离行还是隔离带,如果x,p相同说明在同一行,那么要隔离列min(y,q)列,反之隔离min(x,p)行。

2、当完成1数据记录后,通过排序把隔离人数最多的行和列重大到小排序。

3、排完序后因为题目需要我们输出的是他的索引,既pos,所以我们再排序通过pos从小到大排,而且范围是zong+1,zong+1+l(因为他说设置l条纵向)heng同样道理,这样我们就可以得到最终结果

4、按条件从a[1]输出到a[l]即可,b同理

```#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
struct ty{
    int pos,num;
}heng[1200],zong[1200];

int cmp1(ty x,ty y){
    return x.num > y.num;
}
int cmp2(ty x,ty y){
    return x.pos < y.pos;
}
int main(){
    IOS;
    int m,n,k,l,d; //m行n列,有k,l条隔离带,d个同学
    cin>>m>>n>>k>>l>>d;
    for(int i=1;i<=max(n,m);i++){
        heng[i].pos = i;
        zong[i].pos = i;
    }
    while(d--){
        int x,y,p,q;
        cin>>x>>y>>p>>q;
        if(x==p){
            zong[min(y,q)].num++;
        }else{
            heng[min(x,p)].num++;
        }
    }
    sort(zong+1,zong+1+n,cmp1);
    sort(heng+1,heng+1+m,cmp1);
    
    sort(zong+1,zong+1+l,cmp2);
    sort(heng+1,heng+1+k,cmp2);
    for(int i=1;i<=k;i++){
        cout<<heng[i].pos<<" ";
    }cout<<endl;
    for(int i=1;i<=l;i++){
        cout<<zong[i].pos<<" ";
    }cout<<endl;
}