这题感觉很恶心,磨了我一个半小时,主要是代码量有些大,较为繁琐,写到后面不停复制粘贴,忘记修改横竖的区别了
首先把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+" ");
}
}
}



京公网安备 11010502036488号