对行列横竖分别考虑,因为不会相互影响,因为要最小化,所以考虑贪心,按每次设计走廊分隔的个数排序然后记录一下下标排序输出就可以了

struct R{
    int x;
    int id;
};
bool cmp(R a,R b){
    return a.x>b.x;
}
void solve(){
    int n,m,k,l,d;
    cin>>n>>m>>k>>l>>d;
    vector<R> s(m+1);
    vector<R> h(n+1);
    for(int i=1;i<=m;i++){
        s[i].x=0;
        s[i].id=i;
    }
    for(int i=1;i<=n;i++){
        h[i].x=0;
        h[i].id=i;
    }
    for(int i=1;i<=d;i++){
        int x1,y1,x2,y2;
        cin>>x1>>y1>>x2>>y2;
        if(x1==x2){
            s[min(y1,y2)].x++;
        }
        if(y1==y2){
            h[min(x1,x2)].x++;
        }
    }
    sort(h.begin(),h.end(),cmp);
    vector<int> ans;
    for(int i=0;i<k;i++){
        ans.push_back(h[i].id);
    }
    sort(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++){
        cout<<ans[i]<<" ";
    }
    ans.clear();
    cout<<'\n';
    sort(s.begin(),s.end(),cmp);
    for(int i=0;i<l;i++){
        ans.push_back(s[i].id);
    }
    sort(ans.begin(),ans.end());
    for(int i=0;i<ans.size();i++){
        cout<<ans[i]<<" ";
    }
}