【秋招笔试-支持在线评测-试读版本】0919华为秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试

💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历

✨ 本系列打算持续跟新 春秋招笔试题

👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸

✨ 笔试合集传送们 -> 🧷春秋招笔试合集

🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新

🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞

alt

🌈 华为秋招笔试,来啦!!!

🍥 华为这次笔试的难度对于没打过竞赛的选手来说偏大,其中第三题是HDU的一道原题

1️⃣ python选手狂喜,其他语言的选手需要自己写判断的逻辑

2️⃣ 二分+BFS,属于比较经典的题了,建议大家好好掌握

3️⃣ 01分组背包的变种,加了一个每组至少选一个的限制,也非常经典

🛜 01.K小姐的网络监控 评测链接🔗

问题描述

在一个网络监控系统中,K小姐负责定期检查网络的健康状态。每当重要节日来临,K小姐需要对网络中的各个设备进行数据采集,并根据预设的判断条件来判断网络是否健康。判断条件以布尔表达式的形式给出,包含不同的字段名和对应的数据值。若采集到的数据符合条件,则认为网络健康;否则,网络处于不健康状态。

输入格式

第一行包含两个整数 n n n m m m,分别表示判断条件的数量和数据采集的数量。
接下来的 n n n 行字符串表示布尔表达式,即判断条件。
接下来的 m m m 行,每行包含两个字符串,分别是字段名 k e y key key 和对应的数据值 v a l u e value value

输出格式

对于每个判断条件,输出一个整数: 0 0 0 表示网络健康, 1 1 1 表示网络不健康。

样例输入

2 2
error = '0' AND (name = 'NE40' OR name = 'NE20')
error = '1' AND (name = 'NE40' OR name = 'NE20')
name NE40
error 0

样例输出

0
1

样例解释

  1. 对于第一个条件 error = '0' AND (name = 'NE40' OR name = 'NE20')

    • name 的值为 NE40,而 error 的值为 0 时,该表达式计算结果为 true
    • 因此输出 0,表示网络健康。
  2. 对于第二个条件 error = '1' AND (name = 'NE40' OR name = 'NE20')

    • name 的值为 NE40,而 error 的值为 0 时,该表达式计算结果为 false
    • 因此输出 1,表示网络不健康。

样例输入

3 2
error = '1' AND (name = 'NE40' OR name = 'NE20')
error = '2' AND (name = 'NE40' OR name = 'NE20')
error = '3' AND (name = 'NE40' OR name = 'NE20')
name NE40
error 3

样例输出

1
1
0

样例解释

  1. 对于第一个条件 error = '1' AND (name = 'NE40' OR name ='NE20')

    • name 的值为 NE40,而 error 的值为 3 时,该表达式计算结果为 false
    • 因此输出 1,表示网络不健康。
  2. 对于第二个条件 error = '2' AND (name = 'NE40' OR name ='NE20')

    • name 的值为 NE40,而 error 的值为 3 时,该表达式计算结果为 false
    • 因此输出 1,表示网络不健康。
  3. 对于第三个条件 error = '3' AND (name='NE40' OR name='NE20')

    • name 的值为 NE40,而 error 的值为 3 时,该表达式计算结果为 true
    • 因此输出 0,表示网络健康。

数据范围

  • 0 < n ≤ 5 0 < n \leq 5 0<n5
  • 0 < m ≤ 10 0 < m \leq 10 0<m10

题解

解法:Python

可以使用 Python 的 eval() 函数来动态地计算这些布尔表达式。在执行之前,需要对输入的表达式进行一些简单的替换,以确保能被 Python 正确解析。
AND 替换为 and,将 OR 替换为 or,并将 = 替换为 ==

参考代码

🔒订阅专栏解锁参考代码以及评测功能 → \to 🧷华为春秋招笔试

🧩 02.迷宫中的配送员 评测链接🔗

问题描述

在一个神秘的迷宫中,配送员K小姐需要从左上角的位置(0, 0)出发,前往右下角的位置(N-1, N-1)。这个迷宫是一个 N × N N \times N N×N 的方格,每个格子都有一个辐射值,配送员必须穿着防护能力不低于该辐射值的防护服才能通过。配送员可以上下左右移动,每次移动耗时 1 1 1 单位。K小姐希望在最多 K K K 单位时间内到达目标位置,同时她的防护服需要满足起点和终点的辐射值要求。请问,K小姐的防护服最低需要达到多少防护能力,才能顺利完成任务?

输入格式

第一行包含两个正整数 N N N K K K

接下来有 N N N 行,每行包含 N N N 个以空格分隔的整数,表示迷宫中每个位置的辐射值。

输出格式

输出一个整数,表示配送员穿着防护服的最低防护能力。

样例输入1

2 2
1 3
2 1

样例输出2

2

样例输入2

5 12
0 0 0 0 0
9 9 3 9 0
0 0 0 0 0
0 9 5 9 9
0 0 0 0 0

样例输出2

3

数据范围

2 ≤ N ≤ 100 2 \leq N \leq 100 2N100 K ≥ 2 N − 2 K \geq 2N - 2 K2N2,以保证题目有解。所有辐射值都是非负整数,绝对值不超过 1 0 4 10^4 104

题解

二分+BFS

步骤
  1. 二分查找:可以对可能的防护能力进行二分查找。防护能力的范围从起点和终点的辐射值的最大值开始,一直到最大可能的辐射值( 1 0 4 10^4 104)。

  2. BFS:对于每一个假设的防护能力,用BFS来判断是否能够在不超过 K K K 单位时间内从起点到达终点。BFS能够有效地探索所有可能的路径,并记录每个位置到达时所需的时间。

  3. 判断条件:如果在某个假设的防护能力下,K小姐能够在规定时间内到达终点,则说明可以尝试更小的防护能力;否则,就需要增加防护能力。

时间复杂度分析
  • 二分查找的复杂度为 O ( log ⁡ ( 1 0 4 ) ) O(\log(10^4)) O(log(104))
  • 每次BFS遍历整个迷宫,其复杂度为 O ( N 2 ) O(N^2) O(N2)
  • 因此,总体复杂度为 O ( N 2 log ⁡ ( 1 0 4 ) ) O(N^2 \log(10^4)) O(N2log(104)),对于最大输入规模是可接受的。

参考代码

🔒订阅专栏解锁参考代码以及评测功能 → \to 🧷华为春秋招笔试

🎁 03.日志文件存储优化 评测链接🔗

问题描述

在一个大型数据中心,K小姐负责管理多个进程的日志文件。每个进程都有多个日志文件,系统记录了每个日志文件的大小和其被下载的次数。由于外部存储设备的限制,K小姐需要将部分日志文件保存到容量为 C C C 的 U 盘中。为了确保数据的完整性,每个进程至少需要保存一个日志文件到 U 盘。如果无法实现这一要求,则返回 − 1 -1 1;如果可以实现,则返回所存储的日志文件被下载次数之和的最大值。

输入格式

第一行包含三个整数 N , M , C N, M, C N,M,C,分别表示进程的数量、每个进程的日志文件数量和 U 盘的容量。

接下来的 N × M N \times M N×M 行,每行包含三个整数:所属进程序号、文件大小和被下载次数。

输出格式

输出一个整数,表示 U 盘存储的日志文件被下载次数之和。如果无法实现每个进程至少保存一个日志文件,则输出 − 1 -1 1

样例输入

1 2 10
0 5 1
0 5 2

样例输出

3

样例输入

2 2 10
0 5 1
0 5 2
1 6 1
1 6 2

样例输出

-1

样例输入

2 2 10
0 4 1
0 5 2
1 6 3
1 7 4

样例输出

4

数据范围

  • 1 ≤ N ≤ 100 1 \leq N \leq 100 1N100
  • 1 ≤ M ≤ 100 1 \leq M \leq 100 1M100
  • 1 ≤ C ≤ 1000 1 \leq C \leq 1000 1C1000
  • 文件大小和下载次数均为正整数且不超过 1000 1000 1000

题解

01背包+最少选一个的限制

HDU的原题:hdu3033 https://acm.hdu.edu.cn/showproblem.php?pid=3033

状态定义 dp[i][j] 表示前 i i i 个进程在容量为 j j j 时能获得的最大下载次数。

初始化:首先初始化 dp[0][0 ~ C] = 0,表示没有进程时下载次数为零。其他位置初始化为 -1,表示不可达状态。

转移步骤

  • 对于每个进程,遍历其所有日志文件。
  • 对于每个日志文件,检查当前 U 盘容量是否足够,如果足够,则更新 dp 数组。
  • 在更新时,需要注意:转移先要枚举当前的状态,然后再枚举上一组的状态,这样能保证当前组至少选一个

参考代码

🔒订阅专栏解锁参考代码以及评测功能 → \to 🧷华为春秋招笔试

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春秋招笔试突围

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值