这题感觉很恶心,磨了我一个半小时,主要是代码量有些大,较为繁琐,写到后面不停复制粘贴,忘记修改横竖的区别了

首先把d对人的坐标输入进来,并且进行判断我们需要使用横线还是竖线,这里是横坐标相同,用横线,可以从示例中看出来,纵坐标相同用竖线,然后我们就可以把横竖线的信息装入map中,键表示位置,值表示次数

后面我们需要对map通过值进行从大到小的排序,由于map没办法直接排序,需要使用集合来过渡,所以就创建了一个键值对类型的集合,用于装键值对

然后对集合排完序后需要把它变回map,也就是重新赋值一遍

然后取前k、l个,装入map

然后要对这个map的值再进行一次排序,因为最后输出要从小到大



import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int n=scanner.nextInt();
		int m=scanner.nextInt();
		int k=scanner.nextInt();
		int l=scanner.nextInt();
		int d=scanner.nextInt();
		int a[][]=new int[d][4];
		LinkedHashMap<Integer, Integer> heng=new LinkedHashMap<>();
		LinkedHashMap<Integer, Integer> su=new LinkedHashMap<>();
		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < 4; j++) {
				a[i][j]=scanner.nextInt();
			}
			if(a[i][0]==a[i][2]) {
				su.put(Math.min(a[i][1], a[i][3]), su.getOrDefault(Math.min(a[i][1], a[i][3]), 0)+1);
			}else {
				heng.put(Math.min(a[i][0], a[i][2]), heng.getOrDefault(Math.min(a[i][0], a[i][2]), 0)+1);
			}
		}
//		HashMap是无序的,甚至没办法保证顺序与插入顺序一致,以后Map的实现类推荐使用LinkedHashMap
//		但是LinkedHashMap也没办法直接进行排序
		ArrayList<Map.Entry<Integer, Integer>> henglist=new ArrayList<>();
		ArrayList<Map.Entry<Integer, Integer>> sulist=new ArrayList<>();
		for(Map.Entry<Integer, Integer> x:heng.entrySet()) {
			henglist.add(x);
		}
		Collections.sort(henglist,Collections.reverseOrder(Map.Entry.comparingByValue()));
		LinkedHashMap<Integer, Integer> heng2=new LinkedHashMap<>();
		LinkedHashMap<Integer, Integer> su2=new LinkedHashMap<>();
		for(Map.Entry<Integer, Integer> x:henglist) {
			heng2.put(x.getKey(), x.getValue());
		}
 		for(Map.Entry<Integer, Integer> x:su.entrySet()) {
			sulist.add(x);
		}
		Collections.sort(sulist,Collections.reverseOrder(Map.Entry.comparingByValue()));
		for(Map.Entry<Integer, Integer> x:sulist) {
			su2.put(x.getKey(), x.getValue());
		}
		ArrayList<Integer> listheng=new ArrayList<>();
		ArrayList<Integer> listsu=new ArrayList<>();
		for(Map.Entry<Integer, Integer> x:heng2.entrySet()) {
			if(k>0) {
				listheng.add(x.getKey());
				k--;
			}
		}
		Collections.sort(listheng);
		for(Integer x:listheng) {
			System.out.print(x+" ");
		}
		System.out.println();
		for(Map.Entry<Integer, Integer> x:su2.entrySet()) {
			if(l>0) {
				listsu.add(x.getKey());
				l--;
			}
		}
		Collections.sort(listsu);
		for(Integer x:listsu) {
			System.out.print(x+" ");
		}
		
		

	}

}