米哈游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);
    }
}


#米哈游笔试##米哈游##笔试#
全部评论
只过了92%😢
点赞 回复 分享
发布于 2022-09-14 21:34 山东
哎,我思路和你一模一样,但是递归死活写不出来
点赞 回复 分享
发布于 2022-09-14 21:28 湖北

相关推荐

点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务