这道题
_不是_**按每一行(或列)过道两边交头接耳的组数数量从大到小输出**
_而是_**按每一行(或列)过道两边交头接耳的组数数量从大到小排序后按编号从小从小到大输出**
~~我第一次写这题的代码就这样over了~~
AC代码:
```cpp
#include<bits/stdc++.h>
using namespace std;
int m,n,k,l,d;
struct stru{
int a,wei;
}ki[1002],li[1002];
int wei1[1002],wei2[1002];
int b[1002][1002];
bool cmp(stru x,stru y){
if(x.a!=y.a) return x.a>y.a;
return x.wei<y.wei;
}
int main(){
scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
for(int i=1;i<=m;i++) ki[i].wei=i;
for(int i=1;i<=n;i++) li[i].wei=i;
for(int i=1;i<=d;i++){
int x,y,p,q;
scanf("%d%d%d%d",&x,&y,&p,&q);
b[x][y]=i;
b[p][q]=i;
if(x==p)
li[min(y,q)].a++;
else if(y==q)
ki[min(x,p)].a++;
}
sort(ki+1,ki+m,cmp);
sort(li+1,li+n,cmp);
for(int i=1;i<=k;i++)
wei1[i]=ki[i].wei;
for(int i=1;i<=l;i++)
wei2[i]=li[i].wei;
sort(wei1+1,wei1+k+1);
sort(wei2+1,wei2+l+1);
for(int i=1;i<=k;i++)
printf("%d ",wei1[i]);
printf("\n");
for(int i=1;i<=l;i++)
printf("%d ",wei2[i]);
printf("\n");
return 0;
}
```
可以参考一下
by whr0612 @ 2022-10-25 11:38:36
@[whr0612](/user/775796) 谢谢!!!%%%
by Habseligkeit @ 2022-10-30 11:40:08