算法 BISHI22 分数线划定 求解代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StreamTokenizer in = new StreamTokenizer(br); PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); in.nextToken(); int n = (int) in.nval; in.nextToken(); int m = (int) in.nval; List<int[]> a = new ArrayList<int[]>(); for (int i = 0; i < n; i++) { in.nextToken(); int x = (int) in.nval; in.nextToken(); int y = (int) in.nval; a.add(new int[] { x, y }); } int t = (int) (1.5 * m); a.sort((o1, o2) -> { if (o1[1] != o2[1]) { return o2[1] - o1[1];//降序 } else { return o1[0] - o2[0];//升序 } }); List<int[]> b = new ArrayList<int[]>(); // 存储符合条件的元素 int line = a.get(t - 1)[1]; // 取排序后第t个元素的y值(索引t-1,因为数组从0开始) for(int i=0;i<a.size();i++){ if(a.get(i)[1]<line){ // 数组已降序,遇到y<line直接终止遍历 break; } b.add(a.get(i)); // y≥line,加入结果集 } out.println(line+" "+b.size()); for(int i=0;i<b.size();i++){ out.println(b.get(i)[0]+" "+b.get(i)[1]); } out.flush(); out.close(); br.close(); }