欢迎光临散文网 会员登陆 & 注册

百度笔试 2023.03.28

2023-03-28 22:01 作者:露早戒絕昏睡  | 我要投稿

A. 字符串重组

给定一个字符串,判断能不能经过重排序编程 "Baidu".

思路:把输入的字符串和 "Baidu" 都排序一下再比较,相等就可以,不相等就不行。

B. 构造字符串

给定一个数 x,要用 r,e,d三种字符构造一个字符串,它的回文子串的数量恰好为 x, 要求字符串的长度小于  10%5E5.而 x 的范围是 1%5Cle%20x%20%5Cle%2010%5E9

思路:不难发现,如果用 red 为循环节,构造出来的字符串中,即形如 redredred....,任意长度大于等于 2 的子串都不是回文字符串,因此,回文字符串只有单个字符组成的子串,此时字符串的长度就是回文子串的数量。因此,对于 x 小于 10%5E5 的输入是非常简单的,只需要用 red 循环拼出一个长度为 x 的字符串即可。

对于 x 更大的情况,简单考虑,多个重复字符组成的字符串的回文子串数量比较好算,而且数量增加也比较快,因此考虑优先使用相同字符。设 f(n) 为长度为 n 的全为 d 字符组成的字符串的回文子串数量,f(n)%20%3D%20f(n-1)%20%2B%20nf(n)%20%3D%20%5Cfrac%7Bn(n%2B1)%7D%7B2%7D. 由于输入最大是 10%5E9, 大概 n 为 10%5E5 以下 f(n) 就能覆盖输入的范围。因此先预处理出 f(n), 然后二分找出比 x 小的最大的 f(n_0), 答案的前半部分就是 n_0 个 d, 而后半部分就比较小了,交给 x 小于 10%5E5 的情况来解决。

C. 树上同色连通块

现在有一颗树,n 个节点,树上的节点染成红色或者蓝色,定义边的权值为,删除该边后两个子树中同色连通块的大小之差的绝对值,要求所有边的权重之和。

思路:

用 dp_i 表示以 i 节点为根的子树中的同色连通块数量,则:dp_i%20%3D%20%5CSigma%20dp_j%20-%20I%5Bcolor_i%3D%3Dcolor_j%5D, 其中 j 是 i 的子节点。dp_i 可以自底向上地求出。

求完 dp_i 之后自顶向下地求出答案 ans, 从根节点开始,每次向下递归的时候计算对应的边的贡献:dp_1%20-%20dp_%7Bson%7D%20%2B%20I%5Bcolor_%7Bson%7D%20%3D%3D%20color_i%5D%20-%20dp_%7Bson%7D.


百度笔试 2023.03.28的评论 (共 条)

分享到微博请遵守国家法律