import java.util.ArrayList; import java.util.PriorityQueue; import java.util.Scanner; public class Main { static class person{ int x; int y; int s; int no; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int k=scanner.nextInt(); ArrayList<person> list=new ArrayList<>(); for (int i = 0; i < n; i++) { person p=new person(); p.x=scanner.nextInt(); p.y=scanner.nextInt(); p.no=i+1; p.s=p.x+2*p.y; list.add(p); } list.sort((p1,p2)->{ if(p1.s!=p2.s)return p2.s-p1.s; if(p1.y!=p2.y)return p2.y-p1.y; return p1.no-p2.no; }); PriorityQueue<Integer> queue=new PriorityQueue<>(); for (int i = 0; i < k; i++) { queue.add(list.get(i).no); } for (int i = 0; i < k; i++) { System.out.print(queue.poll()+" "); } } }
后面装序号时不能使用集合后排序的方法,会有一个超时,所以我选择优先队列,默认从小到大