只有第一个点AC
#include <bits/stdc++.h>
using namespace std;
const int N = 2e3+9;
struct Student{ // 表示一对会讲话的同学的坐标
int x, y; // 第一个人的
int p, q; // 第二个人的
}a[N];
struct line{
int id;
int gs;
}o[N], p[N];
bool cmp (line a, line b){
return a.gs > b.gs;
}
// o[i]表示在第i行与第i-1行划分能隔开多少个讲话同学 p[i]同理
int main(){
int m, n, k, l, d; //m是行 n是列
scanf("%d%d%d%d%d", &m, &n, &k, &l, &d);
for (int i=1; i<=d; ++i){
scanf ("%d%d%d%d", &a[i].x, &a[i].y, &a[i].p, &a[i].q);
}
for (int i=1; i<=m-1; ++i){
o[i].id=i;
for (int j=1; j<=d; ++j){
if((a[j].x == i && a[j].p == i+1) || (a[j].p == i && a[j].x == i+1))
o[i].gs++;
}
}
for (int i=1; i<=n-1; ++i){
p[i].id=i;
for (int j=1; j<=d; ++j){
if((a[j].y == i && a[j].q == i+1) || (a[j].q == i && a[j].y == i+1)){
p[i].gs++;
}
}
}
sort (o+1, o+m, cmp);
sort (p+1, p+n, cmp);
for (int i=1; i<=k; ++i){
printf ("%d ", o[i].id);
}
printf ("\n");
for (int i=1; i<=l; ++i){
printf ("%d ", p[i].id);
}
return 0;
}