🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
✨ 本系列打算持续跟新
春秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🍒 本专栏已收集
100+
套笔试题,笔试真题
会在第一时间跟新🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🍠 小红薯秋招笔试,来啦!!!
🍥 本次是异或(
疑惑)数学场,第一题和第三题都是考察了了异或
和 哈希表相关1️⃣ 哈希表和异或性质的结合
2️⃣ 枚举,很多小伙伴看到范围着么大就不敢写了,其实是可以暴力枚举滴
3️⃣ DFS+哈希表+异或的性质,其实思维难度不大的
本次的三题已全上OJ啦,支持评测啦~
🌈 01.相似文章配对 评测链接🔗
问题描述
LYA 是一位热爱写作的博主,她经常在社交平台上发布自己的文章。最近,她发现了一个有趣的现象:如果两篇文章的阅读量进行按位异或运算后恰好等于一个特定值 k k k,那么这两篇文章往往有相似的主题或风格。
现在,LYA 想要统计她所有文章中有多少对相似的文章。她需要你的帮助来完成这个任务。
输入格式
第一行包含两个整数 n n n 和 k k k,分别表示 LYA 发布的文章总数和判断相似文章的特定值。
第二行包含 n n n 个整数 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an,表示每篇文章的阅读量。
输出格式
输出一个整数,表示相似文章的对数。
样例输入
5 2
1 3 5 7 9
样例输出
2
数据范围
- 1 ≤ n < 2 × 1 0 5 1 \leq n < 2 \times 10^5 1≤n<2×105
- 0 ≤ k ≤ 1 0 9 0 \leq k \leq 10^9 0≤k≤109
- 0 ≤ a i ≤ 1 0 9 0 \leq a_i \leq 10^9 0≤ai≤109
题解
哈希表
要找出所有满足 a i ⊕ a j = k a_i \oplus a_j = k ai⊕aj=k 的数对 ( i , j ) (i, j) (i,j),其中 ⊕ \oplus ⊕ 表示按位异或运算。
解决这个问题的关键在于利用异或运算的性质。
我们知道,如果 a ⊕ b = k a \oplus b = k a⊕b=k,那么 a ⊕ k = b a \oplus k = b a⊕k=b。这意味着,对于数组中的每个元素 a i a_i ai,只需要检查 a i ⊕ k a_i \oplus k ai⊕k 是否也在数组中出现过。
可以使用哈希表来存储每个数字出现的次数。遍历数组时,我们可以直接查询 a i ⊕ k a_i \oplus k ai⊕k 是否在哈希表中,如果在,就将其出现的次数加到答案中。
参考代码
🔒订阅专栏后解锁 → \to → 🧷春秋招笔试合集
📚 02.魔法书架摆放 评测链接🔗
问题描述
K小姐是一位热爱阅读的魔法师。她最近在自己的魔法塔顶层打造了一个特殊的阅读空间。这个空间是一个长方体,长宽高分别为 x x x、 y y y 和 z z z。由于K小姐使用了反重力魔法,书架可以悬浮在空中的任何位置。
K小姐新买了一个魔法书架,这个书架的体积为 k k k,但它可以变形成任何边长为正整数的长方体。K小姐想要将这个书架放入阅读空间,要求书架的各个边要与空间的边平行,并且每个角都要位于整数坐标上。
现在,K小姐想知道在所有可能的书架形状中,最多能有多少种不同的摆放方式。这里,旋转书架被视为一种摆放方向,我们需要找出三种摆放方向中摆放方式最多的那种情况的数量。
输入格式
第一行包含一个整数 T T T( 1 ≤ T ≤ 1000 1 \leq T \leq 1000 1≤T≤1000),表示测试数据的组数。
接下来的 T T T 行,每行包含四个整数 x x x、 y y y、 z z z 和 k k k( 1 ≤ x , y , z ≤ 1000 1 \leq x, y, z \leq 1000 1≤x,y,z≤1000, 1 ≤ k ≤ 1 0 9 1 \leq k \leq 10^9 1≤k≤109),分别表示阅读空间的三个边长和魔法书架的体积。
此外,保证所有测试数据中 x x x 的和、 y y y 的和以及 z z z 的和均不超过 1000 1000 1000。
输出格式
对于每组测试数据,输出一行,包含一个整数,表示最多的摆放方式数量。如果无法将魔法书架放入阅读空间,则输出 0 0 0。
样例输入
2
3 1 2 2
1 2 3 7
样例输出
4
0
数据范围
- 1 ≤ T ≤ 1000 1 \leq T \leq 1000 1≤T≤1000
- 1 ≤ x , y , z ≤ 1000 1 \leq x, y, z \leq 1000 1≤x,y,z≤1000
- 1 ≤ k ≤ 1 0 9 1 \leq k \leq 10^9 1≤k≤109
- 所有测试数据中 x x x 的和、 y y y 的和以及 z z z 的和均不超过 1000 1000 1000
题解
枚举
这道题的核心是枚举魔法书架的可能形状,并计算每种形状下的摆放方式数量。
首先,需要理解问题的本质:
- 书架的体积是固定的,但可以变形。
- 我们需要考虑书架的三种摆放方向。
- 对于每种形状,需要计算有多少种不同的摆放位置。
解题思路如下:
- 枚举书架的长和宽(设为 i i i 和 j j j)。
- 根据体积 k k k 计算出高度 h = k / ( i ∗ j ) h = k / (i * j) h=k/(i∗j)。
- 检查这个形状是否合法(高度是否为整数,是否小于等于阅读空间的高度)。
- 如果合法,计算这种形状下的摆放方式数量: ( x − i + 1 ) ∗ ( y − j + 1 ) ∗ ( z − h + 1 ) (x-i+1) * (y-j+1) * (z-h+1) (x−i+1)∗(y−j+1)∗(z−h+1)。
- 更新最大摆放方式数量。
参考代码
🔒订阅专栏后解锁 → \to → 🧷春秋招笔试合集
🌲 03.魔法森林的秘密通道 评测链接🔗
问题描述
在一个神秘的魔法森林中,有 n n n 个魔法节点通过 n − 1 n-1 n−1 条魔法通道相连,形成了一棵魔法树。每条魔法通道都有一个独特的魔力值 w i w_i wi。
LYA 是一位年轻的魔法师,她发现了一个有趣的现象:当她从一个节点 u u u 移动到另一个节点 v v v 时,路径上所有魔法通道的魔力值会进行异或运算,得到的结果就是这两个节点之间的魔法强度。特别地,如果 u u u 和 v v v 是同一个节点,魔法强度为 0 0 0。
现在,LYA 想要进行 q q q 次魔法实验。每次实验,她会选择一个起始节点 u u u 和一个目标魔法强度 k k k,然后计算有多少个节点与 u u u 之间的魔法强度恰好为 k k k。
请你帮助 LYA 完成这些魔法实验,揭示魔法森林的秘密!
输入格式
第一行包含两个整数 n n n 和 q q q( 1 ≤ n , q ≤ 1 0 5 1 \leq n, q \leq 10^5 1≤n,q≤105),分别表示魔法节点的数量和魔法实验的次数。
接下来的 n − 1 n-1 n−1 行,每行包含三个整数 u i u_i ui、 v i v_i vi 和 w i w_i wi( 1 ≤ u i , v i ≤ n 1 \leq u_i, v_i \leq n 1≤ui,vi≤n; u i ≠ v i u_i \neq v_i ui=vi; 0 ≤ w i < 2 60 0 \leq w_i < 2^{60} 0≤wi<260),表示第 i i i 条魔法通道连接节点 u i u_i ui 和 v i v_i vi,其魔力值为 w i w_i wi。保证所有节点都是连通的,且没有重复的魔法通道。
最后 q q q 行,每行包含两个整数 u u u 和 k k k( 1 ≤ u ≤ n 1 \leq u \leq n 1≤u≤n, 0 ≤ k < 2 60 0 \leq k < 2^{60} 0≤k<260),表示一次魔法实验的起始节点和目标魔法强度。
输出格式
对于每次魔法实验,输出一行,包含一个整数,表示与节点 u u u 之间魔法强度恰好为 k k k 的节点数量。
样例输入
3 2
1 2 2
1 3 3
1 0
2 2
样例输出
1
1
数据范围
- 1 ≤ n , q ≤ 1 0 5 1 \leq n, q \leq 10^5 1≤n,q≤105
- 1 ≤ u i , v i ≤ n 1 \leq u_i, v_i \leq n 1≤ui,vi≤n
- u i ≠ v i u_i \neq v_i ui=vi
- 0 ≤ w i < 2 60 0 \leq w_i < 2^{60} 0≤wi<260
- 1 ≤ u ≤ n 1 \leq u \leq n 1≤u≤n
- 0 ≤ k < 2 60 0 \leq k < 2^{60} 0≤k<260
题解
哈希表+DFS
关键点
理解异或操作的性质:如果
a
⊕
b
=
c
a \oplus b = c
a⊕b=c,那么
a
⊕
c
=
b
a \oplus c = b
a⊕c=b。这意味着,如果知道了根节点到节点
u
u
u 的异或和
d
[
u
]
d[u]
d[u],以及目标魔法强度
k
k
k,那么我们只需要找到有多少个节点
v
v
v,使得
d
[
v
]
=
k
⊕
d
[
u
]
d[v] = k \oplus d[u]
d[v]=k⊕d[u]。
我们从根节点(假设为节点1)开始进行DFS。
在DFS的过程中,维护一个变量 sum
,表示从根节点到当前节点的路径上所有魔力值的异或和。
-
对于每个节点,将其到根节点的异或和存储在一个数组
d
中。同时,我们用一个哈希表mp
来记录每个异或和出现的次数。 -
DFS结束后,我们就得到了每个节点到根节点的异或和,以及每个异或和出现的次数。
对于每次查询,我们只需要计算 k ^ d[u]
(其中 ^
表示异或操作),然后在哈希表 mp
中查找这个值出现的次数即可。
时间复杂度是 O ( n + q ) O(n + q) O(n+q),其中 n n n 是节点数, q q q 是查询次数。空间复杂度是 O ( n ) O(n) O(n)。