百度2023暑期实习第一场笔试编程题Java版

2023-05-16

1.

题目内容
小红拿到了一个字符串,她想知道这个字符串能否通过重新排列组成 Baidu 字符串?注:必须大小写完全相同。 共有 t 组询问。

输入描述
第一行输入一个正整数 t ,代表询问次数。
接下来的 t 行,每行输入一个仅包含英文字母的字符串。
所有字符串的长度之和保证不超过 200000

输出描述
对于每次询问,输出一行答案。如果可以通过重新排列组成 Baidu,则输出 Yes ,否则输出 No 。

思路
字符串长度必须为5,且必须包含Baidu5个char。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        char[] chars = "Baidu".toCharArray();
        for (int i = 0; i < n; i++) {
            String s = in.next();
            if(s.length()!=5||!s.contains("B")||!s.contains("a")||!s.contains("i")||!s.contains("d")||!s.contains("u"))
                System.out.println("No");
            else System.out.println("Yes");
        }
    }
}

2.

题目内容:
给定一个整数x,请你构造一个仅由’r’,‘e’,'d’三种字符组成的字符串,其中回文子串的数量恰好为x

输入描述
一个正整数x. 1≤x≤10^9

输出描述
回文子串的数量恰好为x的字符串

思路
d包含1个回文子串,dd包含3个回文子串,ddd包含6个,dddd包含10个,依次累加求。
比如x=14,那么14-10-3-1=0;依次构建10个r,3个e,1个d。
因为10>3>1,所以不会有其他多余的回文子串。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();
        int temp=0,index=0,c=1;
        StringBuilder builder = new StringBuilder("");
        while(x>0){
            temp=0;
            for (int i = 1; i < 1000000; i++) {
                temp+=i;
                if(temp>x){
                    temp-=i;
                    index=i-1;
                    break;
                }
            }// 这段可以用(n+1)*n/2替换
            if(c==1){
                for (int i = 0; i < index; i++) {
                    builder.append("r");
                }
                c++;
            }else if(c==2){
                for (int i = 0; i < index; i++) {
                    builder.append("e");
                }
                c++;
            }else {
                for (int i = 0; i < index; i++) {
                    builder.append("d");
                }
                c=1;
            }
            x=x-temp;
        }
        System.out.println(builder.toString());
    }
}

3.

题目内容
小红拿到了一棵树,每个节点被染成了红色或者蓝色。
小红定义每条边的权值为:删除这条边时,形成的两个子树的同色连通块数量之差的绝对值。
小红想知道,所有边的权值之和是多少?

输入描述
第一行输入一个正整数 n ,代表节点的数量。
第二行输入一个长度为 n 且仅由 R 和 B 两种字符组成的字符串。
第 i 个字符为 R 代表 i 号节点被染成红色,为 B 则被染成蓝色。
接下来的 n−1 行,每行输入两个正整数 u 和 v ,代表节点 u 和节点 v 有一条边相连。

输出描述
一个正整数,代表所有节点的权值之和。

思路
关键在于构建无向图,取每个节点,记录其父节点的位置,之后从当前节点往下dfs,
sum=1+Σ儿子节点的同色联通块数量
同时需要考虑父子之间的数量
如果子节点的颜色和当前节点的颜色是否相同,子节点所在子树的数量需要-1,
比如R-R,右边R的同色连通块数量为1,但因为父子相同色,就是1+(1-0)
如果不同,儿子节点的同色联通块数量不需要-1。
比如B-R,右边R的同色连通块数量为1,但因为父子不同色,就是1+(1)
最后对所有边遍历一遍即可。

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

//4
//BBRR
//1 2
//3 2
//4 1
//答案为2

//        7
//        RRBRRRB
//        1 2
//        1 3
//        1 4
//        3 5
//        3 6
//        4 7
//        答案为16
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int x = in.nextInt();
        TreeNode[] treeNodes = new TreeNode[x];
        char[] colors = in.next().toCharArray();
        for (int i = 0; i < x; i++) {
            treeNodes[i] = new TreeNode(colors[i]);
        }
        int[][] ints = new int[x - 1][2];
        for (int i = 1; i < x; i++) {
            int a = in.nextInt() - 1;
            int b = in.nextInt() - 1;
            ints[i - 1] = new int[]{a, b};
            // 构建无向图,选取每个节点dfs
            treeNodes[a].setFriend(treeNodes[b]);
            treeNodes[b].setFriend(treeNodes[a]);
        }
        int sum = 0;
        for (int i = 0; i < ints.length; i++) {
            int num1 = dfs(treeNodes[ints[i][0]], treeNodes[ints[i][1]]);
            int num2 = dfs(treeNodes[ints[i][1]], treeNodes[ints[i][0]]);
            sum += num1 > num2 ? num1 - num2 : num2 - num1;
        }
        System.out.println(sum);
    }

    static int dfs(TreeNode node, TreeNode pre) {
        int sum = 1;
        for (TreeNode friend : node.friends) {
            if (friend != pre) {
                int dfs = dfs(friend, node);
                if (friend.color != node.color)
                    sum += dfs;
                else sum += dfs - 1;
            }
        }
        return sum;
    }

    static class TreeNode {
        char color;
        List<TreeNode> friends;

        public TreeNode(char color) {
            this.color = color;
            friends = new ArrayList<>();
        }

        void setFriend(TreeNode node) {
            friends.add(node);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度2023暑期实习第一场笔试编程题Java版 的相关文章

随机推荐

  • WIN11安装Docker,并启动连接MySQL

    WIN11安装Docker 并启动连接MySQL 起因 xff1a 新买了一台电脑 xff0c 需要安装开发环境 xff0c 本地安装MySQL过于麻烦 xff0c 考虑到自身并不需要多么精准的MySQL配置 xff08 主要是感觉安装步骤
  • 阿里云镜像恢复,镜像取证

    阿里云镜像raw恢复取证 raw文件下载格式转换新建虚拟机第一个问题 xff1a xff08 耗时一天 xff09 第一个问题的解决 xff1a raw文件下载 根据阿里提供的下载连接 xff0c 建议用迅雷进行下载 下载后解压获得raw格
  • K8S安装网络插件flannel

    引言 xff1a K8S集群刚刚创建完成之后 xff0c 由于网络环境未进行配置 xff0c 在执行查看Node节点时 xff0c 节点状态会显示NotReady xff0c 信息如下 导致显示这个状态的原因是因为还未安装网络插件 xff0
  • 新手c语言实现可一键更改棋盘大小的三子棋程序

    新手刚学完数组 这是第一次上传代码 欢迎大家交流 如果有问题请指出 看到网上很多都是固定棋盘的三子棋 但我想实现可更改的棋盘 所以在判断上需要更改 游戏主程序 define CRT SECURE NO WARNINGS include 34
  • C语言实现可选择棋盘大小的扫雷小游戏

    此扫雷游戏程序可以在开始界面定义雷的个数 可以定义棋盘大小 xff08 只能正方形 xff09 可以扫雷展开一片区域 可以标记雷来获得胜利 xff08 本博客作为自己在某段时间自己的学习感想作为记录方式发出 xff0c 所以内容比较硬核基本
  • 基于51单片机智能窗帘控制模型设计(毕设课设)

    智能窗帘模型设计说明 一 实现要求 1 自动模式 可感知光线强度 光强时控制窗帘关闭 光弱时控制窗帘打开 2 手动模式 可手动打开或关闭窗帘 3 当窗帘被完全打开到顶端时 控制器通过传感器信号反馈控制电机停止 当窗帘关闭到底端时 控制器通过
  • C语言字符串函数strstr的详细解释

    在C语言中 xff0c strstr xff08 xff09 函数是一个字符串处理函数 xff0c 它用于在一个字符串中查找另一个字符串的出现位置 函数原型为 xff1a char strstr const char str1 const
  • C语言字符串函数strcat的详细解释

    在C语言中 xff0c strcat xff08 xff09 函数是一个字符串处理函数 xff0c 它用于将一个字符串连接到另一个字符串的末尾 函数原型 char strcat char dest const char src 该函数接受两
  • C语言字符串函数strerror的详细解释

    在C语言中 xff0c strerror 函数是一个字符串处理函数 xff0c 它用于将错误码转换为相应的错误消息字符串 函数原型为 xff1a char strerror int errnum 该函数接受一个整数参数 errnum xff
  • C语言前缀法解释以及部分应用

    C语言前缀法 xff08 Prefix Sum xff09 也叫前缀和算法 xff0c 是一种用于快速计算数组中前缀和的算法 在计算机程序中 xff0c 前缀和是指一个数组中从第一个元素开始到某个位置的所有元素之和 该算法通过对原数组进行预
  • 人工智能前景

    人工智能AI的未来非常广阔和光明 随着科技的不断发展和普及 xff0c 人工智能已经开始逐渐融入我们生活的方方面面 xff0c 比如智能家居 智能医疗 无人驾驶等等 未来 xff0c 随着更多的应用场景被开拓和挖掘 xff0c 人工智能的应
  • Navicat连接Mysql(Windows环境下)报错提示错误代码1130和1251的解决方法

    目录 1 错误代码11301 1 错误信息1 2 解决方法 2 错误代码12512 1 错误信息2 2 解决方法 使用Navicat连接Mysql报错提示错误代码1130和1251 xff0c 解决方法汇总如下 xff1a 以下均在Wind
  • ELF 哈希算法

    int ELFHash char str int hash 61 0 long x 61 0 while str hash 61 hash lt lt 4 43 str 43 43 if x 61 hash amp 0xF0000000L
  • 用MATLAB写一个自动生成福利彩票双色球号码的程序

    用MATLAB写一个自动生成福利彩票双色球号码的程序 规则 红色球 xff1a 1 33号任选6个 蓝色球 xff1a 1 16号任选1个 red 61 randi 1 33 1 6 disp 39 红色球 39 fprintf 39 c
  • 给虚拟机制作一张“快照”

    什么是快照呢 xff1f 快照就像用一个文件来放在真实文件面前 xff0c 我们看到的是真实文件 xff0c 但是是在这个文件上进行编辑 xff0c 避免了对真实文件的直接影响 快照是我们通过镜像文件对虚拟机做的一个照片 xff0c 可以反
  • VMware提示“驱动器未就绪”的解决办法

    用VMware安装Linux xff0c 每次启动都要提示错误 xff1a 驱动器未就绪 xff0c 点两次取消才能进入 xff0c 虽然不影响使用 xff0c 但是挺烦的 后来终于发现这是软驱的事 解决办法 xff1a 如图 xff0c
  • 基于51单片机智能温度控制器温控系统(毕设课设)

    本设计以AT89C51 单片机为控制的核心 xff0c 硬件上外加温度传感器作为检测室内温度并且采集室内温度数据的工具 xff0c 以及对室内温度自动控制的作用 其中对于温度的自由设定 xff0c 用户可以用按键简单直观来实现 xff0c
  • Ubuntu16.04安装Docker的步骤

    大家好 xff0c 我是加摩斯 xff0c 觉得文章有帮助的小伙伴 xff0c 记得一键三连哟 xff5e 申明 xff1a 原创 xff0c 转载前请与我沟通 Docker是一种容器 xff0c 但它是轻量级的 目前在中国 xff0c 已
  • 【正则表达式】通俗易懂——正则表达式的零宽断言:?=、?<=、?!、?<! 的具体使用区别

    ps xff1a 想吐槽一下 xff0c 什么前瞻 xff0c 后顾 xff0c 负前瞻 xff0c 负后顾 xff0c 小白就想简单了解会用而已 xff0c 为啥网上很多明明很简单的东西非得写的那么 举的例子也那么 xff0c 对小白一点
  • 百度2023暑期实习第一场笔试编程题Java版

    1 题目内容 小红拿到了一个字符串 xff0c 她想知道这个字符串能否通过重新排列组成 Baidu 字符串 xff1f 注 xff1a 必须大小写完全相同 共有 t 组询问 输入描述 第一行输入一个正整数 t xff0c 代表询问次数 接下