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

京公网安备 11010502036488号