20220913百度2023秋招研发B卷题解

T1

小红拿到了一个字符串,她想知道有多少个"baidu"型子串?
所谓"baidu“型字符串,指第1个、第4个字母是辅音,第2、3、5个字符是元音,且每个字母都不相同的字符串。
例如,"taigu"、"huida"、"paobu"、"baoli"等都是"baidu"型字符串。
我们定义元音字母仅有'a、'e'、'i'、'o'、'u'这五种,其余字母均为辅音字母。

输入一个字符串,长度<=2e5
输出"baidu"型子串的数量

input:
baiduxiaojiabankanjiaran

output:
2

"baidu"和"duoxi"合法。其中"jiaba"和"jiara"不合法,因为a出现了2次。

滑动窗口,维护一下窗口内字母特征以及字母出现次数即可。

import string

s = input()

if len(s) <= 4:
    print(0)
    exit(0)
else:
    cor = {v: i for i, v in enumerate(string.ascii_lowercase)}
    y = set(list('aeiou'))
    nums = [0 if i in y else 1 for i in s]
    ans = 0
    diff = 0
    count = [0] * 26
    cnt = 0
    for i in range(4):
        cnt = cnt * 10 + nums[i]
        count[cor[s[i]]] += 1
        if count[cor[s[i]]] > 1: diff += 1

    for i, v in enumerate(s[4:], start=4):
        cnt = cnt * 10 + nums[i]
        count[cor[v]] += 1
        if count[cor[v]] == 2:
            diff += 1

        if cnt == 10010 and not diff:
            ans += 1

        cnt -= nums[i - 4] * 10000
        count[cor[s[i - 4]]] -= 1
        if count[cor[s[i - 4]]] == 1:
            diff -= 1
    print(ans)

T2

有n个怪物排成一排,第i个怪物的血量为ai。小红有两个技能可以打怪:
1. 强力攻击,消耗1mp,对一只怪物造成1点伤害。
2. 踏前斩,消耗5mp,对当前怪物造成1的伤害,同时剑气将波及后两个怪物,对下一个怪物造成2点伤害,对下下个怪物造成3点伤害。
如果一个怪物受伤后血量小于等于0,则怪物死亡。死亡后怪物的尸体依然占据一个位置,会被踏前斩的剑气打到。
小红想知道,击杀全部怪物至少需要花费多少mp?

输入一个n和n个数字作为所有怪物血量
输出最小使用的mp

input:
5
1 2 4 2 3

output:
10

贪心即可,因为5hp是可以消耗1+2+3=6滴血的。所以优先使用技能,剩下的普通攻击A掉。

贪心的时候注意从后往前遍历,这样可以通过100%,从前往后遍历只能通过0%。提供case:[1, 9, 8, 9, 8]:

  • 从前往后贪:[1,4,8,7,6]-->[0,2,5,7,6]-->[0,0,1,1,6]
  • 从后往前贪:[1,4,8,7,6]-->[1,4,6,3,0]-->[1,3,4,0,0]-->[0,1,1,0,0]
n = int(input())
a = list(map(int, input().split()))
ans = 0
i = 0
for i in range(n - 3, -1, -1):
    if a[i] >= 1 and a[i + 1] >= 2 and a[i + 2] >= 3:
        c = min(a[i], a[i + 1] // 2, a[i + 2] // 3)
        a[i] -= c
        a[i + 1] -= c * 2
        a[i + 2] -= c * 3
        ans += c * 5

print(ans + sum(a))

T3

小红拿到了一段java代码,请你判断其中最多有多少层for循环嵌套。
保证代码合法,且不含注释。循环语句只有for,条件语句只有if,循环语句和条件语句保证包含大括号用来控制范围。
代码中只有一个类和一个主函数。

多行输入
输出最大嵌套数

input:
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int a = 0 , b = 0;
        int n = in.nextInt();
        for (int i = 0; i < n; i++) {
            if ( a < b ) {
                a += b / 2;
            }
            for (int j = 0; j < n; j++) {
                b++;
                a += b;
            }
            for (int j = 1; j < n; j *= 2) {
                b--;
            }
        }
        System.out.println(a);
    }
}

output:
2

模拟题,注意多行输入。维护一个栈维护遇到的大括号和过程值cnt=0,因为题目说了for循环必然使用大括号包裹,那么只需要判断栈入的大括号前面是不是for的大括号即可,如果是就cnt+1,否则就不管。每次遇到右括号就出栈,出栈的时候判断是不是for循环后的括号,如果是就cnt-1,否则就不管。遍历过程中最大的cnt就是结果。

注意Python多行输入。

import sys

lines = list(sys.stdin.readlines())
a = ''.join(lines)
stack = []
n = len(a)
ans = 0
cnt = 0

pf = 0  # 前一个是不是for
i = 0
while i < n - 4:
    if a[i] == '{':
        stack.append(pf)
        cnt += pf
        pf = 0
        i += 1
    elif a[i] == 'f' and a[i + 1] == 'o' and a[i + 2] == 'r':
        pf = 1
        i += 3
    elif a[i] == '}':
        cnt -= stack.pop()
        i += 1
    else:
        i += 1

    ans = max(ans, cnt)

print(ans)
#百度##百度笔试##笔试##百度23秋招笔试编程题有点儿简单啊#
全部评论
第一题通过率63.64%,不知道是哪里的边界没有考虑到
3 回复 分享
发布于 2022-09-13 21:11 湖南
万一第二题你举得例子是反过来的呢,这样你从后往前,不就是现在的从前往后了吗
2 回复 分享
发布于 2022-09-13 22:20 辽宁
王哥!
1 回复 分享
发布于 2022-09-13 21:02 北京
为啥从后往前遍历一定能保证正确性呢?
1 回复 分享
发布于 2022-09-13 21:30 浙江
会不会有一种可能 String str = "for (int i = 0; i < n; i++) {}";
1 回复 分享
发布于 2022-09-14 23:50 四川
踏前斩从后往前 20% 怎么测都是对的
点赞 回复 分享
发布于 2022-09-13 21:10 浙江
没有考虑顺序,绝了
点赞 回复 分享
发布于 2022-09-13 21:11 广东
踏前斩那道题从后往前的思路,感觉从数学上还是没法严格论证,总感觉肯定就能找到顺序比逆序好的case,那如果真的是正着来一遍反着来一遍然后取小,也不应该测试用例都过了但通过率0啊?也应该是通过一部分才对啊?如果真的大家逆序的都a了,那只能证明这题系统里面的判题用例确实有问题
点赞 回复 分享
发布于 2022-09-13 22:29 北京
woc大佬tql,第二题几行代码就a了
点赞 回复 分享
发布于 2022-09-13 23:21 辽宁
哥们吐了,第二题思路一模一样,用的java手贱自己实现min,然后实现错了。第三题用栈只考虑了第一个for循环的嵌套,没考虑到第一级就有多个并列for
点赞 回复 分享
发布于 2022-09-14 00:56 陕西
for(;;) for(;;) for(;;)不考虑吗 if(true) a=1; {} 这种不考虑吗
点赞 回复 分享
发布于 2022-09-14 08:54 吉林
有考A卷的吗?ak的有吗?
点赞 回复 分享
发布于 2022-09-14 08:58 浙江
兄弟,******,从此秋招不迷路
点赞 回复 分享
发布于 2022-09-14 16:18 澳大利亚
点赞 回复 分享
发布于 2022-09-15 22:56 广东
请问是不是还有选择题
点赞 回复 分享
发布于 2022-09-18 10:20 广东
@神崎兰子
点赞 回复 分享
发布于 2023-03-09 07:53 北京

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
评论
20
74
分享
牛客网
牛客企业服务