牛客网…能不能用点心,题目根本不完整,是不是包含多组输入也不说,还是百度了别人的博客,才看到的完整题目,无语了…

输入都不完整:以下是看别人的博客,补充的输入说明
输入描述
输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为’Q’的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。
输入样例
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5
输出样例
5
6
5
9
通过代码
import java.util.Scanner;public class Main {public static void main(String[] args) {//N 学生数量//M 操作次数int N, M;String q;int a, b;Scanner in = new Scanner(System.in);//多组输入while (in.hasNext()) {N = in.nextInt();M = in.nextInt();int[] score = new int[N + 1];for (int i = 1; i <= N; i++) {score[i] = in.nextInt();}for (int i = 1; i <= M; i++) {q = in.next();a = in.nextInt();b = in.nextInt();if (q.equals("U")) {score[a] = b;} else if (q.equals("Q")) {if (a >= b) {int tmp = a;a = b;b = tmp;}int maxValue = score[a];for (int j = a + 1; j <= b; j++) {if (score[j] > maxValue) {maxValue = score[j];}}System.out.println(maxValue);}}}}
}


本题需要注意的有:
需要解决的有:
解决方法:
import java.util.*;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);String line;Map map = new LinkedHashMap<>();while (in.hasNext()) {line = in.nextLine();if (line == null || "".equals(line)) {break;}line = line.substring(line.lastIndexOf("\\") + 1);map.put(line, map.getOrDefault(line, 0) + 1);}List> list = new ArrayList<>(map.entrySet());Collections.sort(list, new Comparator>() {@Overridepublic int compare(Map.Entry o1, Map.Entry o2) {return o2.getValue() - o1.getValue();}});for (int i = 0; i < 8 && i < list.size(); i++) {String[] split = list.get(i).getKey().split(" ");if (split[0].length() > 16) {split[0] = split[0].substring(split[0].length() - 16);}System.out.println(split[0] + " " + split[1] + " " + list.get(i).getValue());}}
}


下面梳理一下题目中的细节,以及说明一下解题思路
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);Map map = new HashMap<>();map.put("3", 1);map.put("4", 2);map.put("5", 3);map.put("6", 4);map.put("7", 5);map.put("8", 6);map.put("9", 7);map.put("10", 8);map.put("J", 9);map.put("Q", 10);map.put("K", 11);map.put("A", 12);map.put("2", 13);map.put("joker", 14);map.put("JOKER", 15);String line;while (in.hasNext()) {line = in.nextLine();if ("".equals(line) || line == null) {break;}String[] split = line.split("-");String[] left = split[0].split(" ");String[] right = split[1].split(" ");if (left.length != right.length) {if ("joker".equals(left[0])) {print(left);} else if ("joker".equals(right[0])) {print(right);} else if (left.length == 4) {print(left);} else if (right.length == 4) {print(right);} else {System.out.println("ERROR");}} else {if (map.get(left[0]) > map.get(right[0])) {print(left);} else {print(right);}}}}private static void print(String[] arr) {for (int i = 0; i < arr.length; i++) {if (i != 0) {System.out.print(" ");}System.out.print(arr[i]);}System.out.println();}
}