题意理解
显然是按照学生数排序,然后贪心。
需要注意的是,貌似两次排序是少不了的。第一次是要按照学生人数从多到少排序,第二次是需要按照编号数从小到大排序。
代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
// 横着看
static class SeatX implements Comparable {
int index;
int students;
public SeatX(int index, int students) {
this.index = index;
this.students = students;
}
@Override
public int compareTo(Object o) {
SeatX x = (SeatX) o;
return -(this.students - x.students);
}
}
// 竖着看
static class SeatY implements Comparable {
int index;
int students;
public SeatY(int index, int students) {
this.index = index;
this.students = students;
}
@Override
public int compareTo(Object o) {
SeatY y = (SeatY) o;
return -(this.students - y.students);
}
}
public static void main(String[] args) {
int M, N, K, L, D;
Scanner scanner = new Scanner(System.in);
M = scanner.nextInt();
N = scanner.nextInt();
K = scanner.nextInt();
L = scanner.nextInt();
D = scanner.nextInt();
SeatX[] seatX = new SeatX[M + 1];
for (int i = 0; i <= M; i++) {
seatX[i] = new SeatX(i, 0);
}
SeatY[] seatY = new SeatY[N + 1];
for (int i = 0; i <= N; i++) {
seatY[i] = new SeatY(i, 0);
}
int X, Y, P, Q;
for (int i = 0; i < D; i++) {
X = scanner.nextInt();
Y = scanner.nextInt();
P = scanner.nextInt();
Q = scanner.nextInt();
if (X == P) {
int minNum = Y < Q ? Y : Q;
seatY[minNum].students++;
} else {
int minNum = X < P ? X : P;
seatX[minNum].students++;
}
}
Arrays.sort(seatX);
Arrays.sort(seatY);
List<Integer> posX = new ArrayList<>();
for(int i = 0; i < K; i++) {
posX.add(seatX[i].index);
}
Collections.sort(posX);
if (K > 0) {
for (int i = 0; i < K - 1; i++) {
System.out.print(posX.get(i)+ " ");
}
System.out.println(posX.get(K - 1));
} else {
System.out.println();
}
List<Integer> posY = new ArrayList<>();
for(int i = 0; i < L; i++) {
posY.add(seatY[i].index);
}
Collections.sort(posY);
if (L > 0) {
for (int i = 0; i < L - 1; i++) {
System.out.print(posY.get(i) + " ");
}
System.out.println(posY.get(L - 1));
} else {
System.out.println();
}
scanner.close();
}
}
欢迎加入“不会算法一群菜鸟”,群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理