米哈游9.14第三题忏悔录,呜呜
//第三题 import java.util.*; public class Main { static int sum = 0; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] s = scanner.nextLine().split(" "); int n = Integer.parseInt(s[0]); int m = Integer.parseInt(s[1]); ArrayList<Integer[]> integers = new ArrayList<>(); for (int i = 0; i < n - 1; i++) { s = scanner.nextLine().split(" "); Integer[] integers1 = new Integer[2]; integers1[0] = Integer.parseInt(s[0]); integers1[1] = Integer.parseInt(s[1]); integers.add(integers1); } DFS(integers, m, 0, 0); System.out.println(sum); } //找到树结构归就完事了,怪我最近LC刷的少了,手又生疏了,加油,秋招必胜 private static int DFS(ArrayList<Integer[]> integers, int m, int fu, int it) { ArrayList<Integer> list = new ArrayList<>(); for (Integer[] k : integers) { if (k[0] == m && k[1] != fu) list.add(k[1]); else if (k[1] == m && k[0] != fu) list.add(k[0]); } if (list.size() == 1) { int tmp = DFS(integers, list.get(0), m, it); if (list.get(0) % 2 != m % 2) { tmp += 1; } sum += tmp; return tmp; } else if (list.size() == 2) { int h = DFS(integers, list.get(0), m, it) + DFS(integers, list.get(1), m, it); //这里改了一下,如果父节点和两个字节点奇偶性相同,那么要减1 if (list.get(0) % 2 == m % 2 && list.get(1) % 2 == m % 2) h -= 1; else if (list.get(0) != m % 2 && list.get(1) != m % 2) h += 1; sum += h; return h; } return 1; } }
第一题:
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String[] s = scanner.nextLine().split(" "); int n = Integer.parseInt(s[0]); int k = Integer.parseInt(s[1]); String s1 = scanner.nextLine(); int b = 0, l, r, l1 = 0, r1 = Integer.MAX_VALUE; ArrayList<Integer> list = new ArrayList<>(); while (b < n - 5) { int mihoyo = s1.indexOf("mihoyo", b); if (mihoyo != -1) { list.add(mihoyo); if (list.size() >= k) { r = list.get(list.size() - 1) + 5; l = list.get(list.size() - k); if (r - l < r1 - l1) { r1 = r; l1 = l; } } b = list.get(list.size() - 1) + 6; } } if (list.size() >= k) System.out.println(l1 + " " + r1); else System.out.println(-1); } }