美团0311所有AC代码

Q1

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char[] cs = scan.next().toCharArray();
        int ans = 0;
        for (int i = 0; i < cs.length - 1; i++) {
            if (cs[i] == cs[i + 1]) {
                ans++;
                i++;
            }
        }
        System.out.println(ans);
    }
}

@Q2

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt(), m = scan.nextInt(), k = scan.nextInt();
        char[][] grid = new char[n][m];
        for (int i = 0; i < n; i++) {
            grid[i] = scan.next().toCharArray();
        }
        int[][] matrix = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = scan.nextInt();
            }
        }
        int[][] dp = new int[n][m];
        for (int[] ints : dp) Arrays.fill(ints, -1);
        dp[0][0] = 0;
        int max = 0;
        for (int j = 1; j < m; j++) {
            if (grid[0][j] == grid[0][j - 1]) dp[0][j] = dp[0][j - 1] + matrix[0][j];
            else {
                if (dp[0][j - 1] >= k) dp[0][j] = dp[0][j - 1] - k + matrix[0][j];
            }
            max = Math.max(max, dp[0][j]);
        }
        for (int i = 1; i < n; i++) {
            if (grid[i][0] == grid[i - 1][0]) dp[i][0] = dp[i - 1][0] + matrix[i][0];
            else {
                if (dp[i - 1][0] >= k) dp[i][0] = dp[i - 1][0] - k + matrix[i][0];
            }
            max = Math.max(max, dp[i][0]);
        }
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                if (dp[i - 1][j] != -1) {
                    if (grid[i][j] == grid[i - 1][j]) {
                        dp[i][j] = dp[i - 1][j] + matrix[i][j];
                    } else if (dp[i - 1][j] >= k) {
                        dp[i][j] = dp[i - 1][j] - k + matrix[i][j];
                    }
                }
                if (dp[i][j - 1] != -1) {
                    if (grid[i][j] == grid[i][j - 1]) {
                        dp[i][j] = Math.max(dp[i][j], dp[i][j - 1] + matrix[i][j]);
                    } else if (dp[i][j - 1] >= k) {
                        dp[i][j] = Math.max(dp[i][j], dp[i][j - 1] - k + matrix[i][j]);
                    }
                }
                max = Math.max(dp[i][j], max);
            }
        }
        System.out.println(max);
    }
}

Q3

import java.util.Arrays;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] array = new int[n][2];
        for (int i = 0; i < n; i++) array[i][0] = in.nextInt();
        for (int i = 0; i < n; i++) array[i][1] = in.nextInt();
        // 按照出现时间排序
        Arrays.sort(array, (a, b) -> a[0] - b[0]);
        int max = 0, t = 0;
        PriorityQueue<int[]> queue = new PriorityQueue<>((a, b) -> a[1] - b[1]); // 小顶堆
        for (int i = 0; i < n; i++) {
            int left = array[i][0], right = array[i][1];
            while (!queue.isEmpty() && queue.peek()[1] <= left) {
                // 弹出所有比left 小的值
                queue.poll();
            }
            queue.add(new int[]{left, right});
            if (queue.size() == max) {
                t += queue.peek()[1] - left + 1;
            } else if (queue.size() > max) {
                t = queue.peek()[1] - left + 1;
                max = queue.size();
            }
        }
        System.out.println(max + " " + t);
    }
}

Q4

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int[][] grid = new int[16][16];
        for (int[] ints : grid) Arrays.fill(ints, 0);
        Map<Character, int[]> map = new HashMap<>();
        Set<Integer> set1 = new HashSet<>(), set2 = new HashSet<>();
        set1.add(0);
        set2.add(15 * 16 + 15);
        map.put('U', new int[]{-1, 0});
        map.put('D', new int[]{1, 0});
        map.put('L', new int[]{0, -1});
        map.put('R', new int[]{0, 1});
        grid[0][0] = 1;
        grid[15][15] = 2;
        int[] player1 = {0, 0}, player2 = {15, 15};
        char[] cs1 = scan.next().toCharArray();
        char[] cs2 = scan.next().toCharArray();
        char d1 = '.', d2 = '.';
        boolean flag = false;
        for (int i = 0; i < cs1.length; i++) {
            if (cs1[i] == 'F' && cs2[i] != 'F') {
                if (check(player1, player2, d1)) {
                    System.out.println(i + 1);
                    System.out.println("D");
                    flag = true;
                    break;
                }
                d2 = cs2[i];
                int[] dir = map.get(d2);
                int x = player2[0] + dir[0], y = player2[1] + dir[1], hash = x * 16 + y;
                if (x >= 0 && x < 16 && y >= 0 && y < 16 && !set1.contains(hash)) {
                    player2[0] = x;
                    player2[1] = y;
                    set2.add(hash);
                }
            } else if (cs1[i] != 'F' && cs2[i] == 'F') {
                if (check(player2, player1, d2)) {
                    System.out.println(i + 1);
                    System.out.println("W");
                    flag = true;
                    break;
                }
                d1 = cs1[i];
                int[] dir = map.get(d1);
                int x = player1[0] + dir[0], y = player1[1] + dir[1], hash = x * 16 + y;
                if (x >= 0 && x < 16 && y >= 0 && y < 16 && !set2.contains(hash)) {
                    player1 = new int[]{x, y};
                    set1.add(hash);
                }
            } else if (cs1[i] == 'F' && cs2[i] == 'F') {
                boolean f1 = check(player1, player2, d1), f2 = check(player2, player1, d2);
                if (f1 && f2) {
                    System.out.println(i + 1);
                    System.out.println("P");
                    flag = true;
                    break;
                } else if (f1) {
                    System.out.println(i + 1);
                    System.out.println("D");
                    flag = true;
                    break;
                } else if (f2) {
                    System.out.println(i + 1);
                    System.out.println("W");
                    flag = true;
                    break;
                }
            } else {
                d1 = cs1[i];
                d2 = cs2[i];
                int[] dir1 = map.get(d1), dir2 = map.get(d2);
                int x1 = player1[0] + dir1[0], y1 = player1[1] + dir1[1];
                int x2 = player2[0] + dir2[0], y2 = player2[1] + dir2[1];
                int hash1 = x1 * 16 + y1, hash2 = x2 * 16 + y2;
                if (x1 >= 0 && x1 < 16 && y1 >= 0 && y1 < 16 && !set1.contains(hash2) && x2 >= 0 && x2 < 16 && y2 >= 0 && y2 < 16 && !set2.contains(hash1)) {
                    if (x1 == x2 && y1 == y2) {
                        System.out.println(i + 1);
                        System.out.println("P");
                        flag = true;
                        break;
                    }
                    player1 = new int[]{x1, y1};
                    player2 = new int[]{x2, y2};
                    set1.add(hash1);
                    set2.add(hash2);
                } else if (x1 >= 0 && x1 < 16 && y1 >= 0 && y1 < 16 && !set2.contains(hash1)) {
                    player1 = new int[]{x1, y1};
                    set1.add(hash1);
                } else if (x2 >= 0 && x2 < 16 && y2 >= 0 && y2 < 16 && !set1.contains(hash2)) {
                    player2 = new int[]{x2, y2};
                    set2.add(hash2);
                }
            }
        }
        if (!flag) {
            System.out.println(256);
            if (set1.size() == set2.size()) {
                System.out.println("P");
            } else if (set1.size() > set2.size()) {
                System.out.println("D");
            } else {
                System.out.println("W");
            }
        }
    }

    public static boolean check(int[] player1, int[] player2, int d) {
        if (d == 'U') {
            return player1[1] == player2[1] && player1[0] > player2[0];
        } else if (d == 'D') {
            return player1[1] == player2[1] && player1[0] < player2[0];
        } else if (d == 'L') {
            return player1[0] == player2[0] && player1[1] > player2[1];
        } else {
            return player1[0] == player2[0] && player1[1] < player2[1];
        }
    }
}

Q5

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    static int ans = 0;

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        char[] colors = scan.next().toCharArray();
        List<Integer>[] list = new ArrayList[n + 1];
        for (int i = 0; i <= n; i++) list[i] = new ArrayList<>();
        for (int i = 2; i <= n; i++) list[scan.nextInt()].add(i);
        dfs(list, colors, 1);
        System.out.println(ans);
    }

    public static int[] dfs(List<Integer>[] lists, char[] colors, int node) {
        int[] ret = new int[2];
        for (int next : lists[node]) {
            int[] ints = dfs(lists, colors, next);
            ret[0] += ints[0];
            ret[1] += ints[1];
        }
        if (ret[0] == ret[1]) ans++;
        if (colors[node - 1] == 'R') ret[0] += 1;
        else ret[1] += 1;
        return ret;
    }
}

全部评论
校友牛逼啊,tql
1 回复 分享
发布于 2023-03-12 00:04 江西
题目还有人记得吗?有点忘了
1 回复 分享
发布于 2023-03-12 10:26 江苏
太强了
点赞 回复 分享
发布于 2023-03-12 00:18 辽宁
请问怎么申请重考呀
点赞 回复 分享
发布于 2023-03-13 09:33 四川
太强了
点赞 回复 分享
发布于 2023-03-13 13:56 陕西
第二题,初始化第一行和第一列为什么不够k,不执行break
点赞 回复 分享
发布于 2023-03-15 21:46 广东

相关推荐

21 81 评论
分享
牛客网
牛客企业服务