🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
✨ 本系列打算持续跟新
春秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🍒 本专栏已收集
100+
套笔试题,笔试真题
会在第一时间跟新🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🌈 华为秋招笔试,来啦!!!
🍥 华为这次笔试的难度对于没打过竞赛的选手来说偏大,其中第三题是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
样例解释
-
对于第一个条件
error = '0' AND (name = 'NE40' OR name = 'NE20')
:- 当
name
的值为NE40
,而error
的值为0
时,该表达式计算结果为true
。 - 因此输出
0
,表示网络健康。
- 当
-
对于第二个条件
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
样例解释
-
对于第一个条件
error = '1' AND (name = 'NE40' OR name ='NE20')
:- 当
name
的值为NE40
,而error
的值为3
时,该表达式计算结果为false
。 - 因此输出
1
,表示网络不健康。
- 当
-
对于第二个条件
error = '2' AND (name = 'NE40' OR name ='NE20')
:- 当
name
的值为NE40
,而error
的值为3
时,该表达式计算结果为false
。 - 因此输出
1
,表示网络不健康。
- 当
-
对于第三个条件
error = '3' AND (name='NE40' OR name='NE20')
:- 当
name
的值为NE40
,而error
的值为3
时,该表达式计算结果为true
。 - 因此输出
0
,表示网络健康。
- 当
数据范围
- 0 < n ≤ 5 0 < n \leq 5 0<n≤5
- 0 < m ≤ 10 0 < m \leq 10 0<m≤10
题解
解法: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 2≤N≤100, K ≥ 2 N − 2 K \geq 2N - 2 K≥2N−2,以保证题目有解。所有辐射值都是非负整数,绝对值不超过 1 0 4 10^4 104。
题解
二分+BFS
步骤
-
二分查找:可以对可能的防护能力进行二分查找。防护能力的范围从起点和终点的辐射值的最大值开始,一直到最大可能的辐射值( 1 0 4 10^4 104)。
-
BFS:对于每一个假设的防护能力,用BFS来判断是否能够在不超过 K K K 单位时间内从起点到达终点。BFS能够有效地探索所有可能的路径,并记录每个位置到达时所需的时间。
-
判断条件:如果在某个假设的防护能力下,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 1≤N≤100
- 1 ≤ M ≤ 100 1 \leq M \leq 100 1≤M≤100
- 1 ≤ C ≤ 1000 1 \leq C \leq 1000 1≤C≤1000
- 文件大小和下载次数均为正整数且不超过 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 → 🧷华为春秋招笔试