解题思路:
想让更少的人交头接耳,就必须保证一条过道可以尽可能多的分隔开两个说话的人,所以定义一个结构体,里面包含两个成员,一个是记录某两排或者某两列之间说话的人数,一个是记录分隔开的座位号。然后进行排序,先按照人数从大到小排序,人数越多说明这条过道能把更多说话的人分开。再按照座位序号降序。
代码:
#include <bits/stdc++.h>
using namespace std;
struct fun{
int num;//分隔的人数
int idex;//分隔的座椅号
}h[2010],s[2010];
int cmp(fun a,fun b)
{
if(a.num!=b.num)
return a.num>b.num;
}
int cmp1(fun a,fun b)
{
if(a.idex!=b.idex)
return a.idex<b.idex;
}
int main()
{
int m,n,k,l,d;
cin>>m>>n>>k>>l>>d;
int x,y,p,q;
int ans1=0,ans2=0;
for(int i=1;i<=d;i++)
{
cin>>x>>y>>p>>q;
if(x==p)
{
s[min(y,q)].num++;
s[min(y,q)].idex=min(y,q);
}
else if(y==q)
{
h[min(x,p)].num++;
h[min(x,p)].idex=min(x,p);
}
}
sort(h+1,h+m+1,cmp);
sort(h+1,h+k+1,cmp1);
sort(s+1,s+n+1,cmp);
sort(s+1,s+l+1,cmp1);
for(int i=1;i<=k;i++)
{
if(i!=k)
cout<<h[i].idex<<" ";
else
cout<<h[i].idex;
}
cout<<endl;
for(int i=1;i<=l;i++)
{
if(i!=l)
cout<<s[i].idex<<" ";
else
cout<<s[i].idex;
}
return 0;
}