【秋招笔试-试读版】9.14红薯秋招(已改编)-三语言题解

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

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

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

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

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

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

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

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

alt

🍠 小红薯秋招笔试,来啦!!!

🍥 本次是异或(疑惑)数学场,第一题和第三题都是考察了了 异或 和 哈希表相关

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 1n<2×105
  • 0 ≤ k ≤ 1 0 9 0 \leq k \leq 10^9 0k109
  • 0 ≤ a i ≤ 1 0 9 0 \leq a_i \leq 10^9 0ai109

题解

哈希表

要找出所有满足 a i ⊕ a j = k a_i \oplus a_j = k aiaj=k 的数对 ( i , j ) (i, j) (i,j),其中 ⊕ \oplus 表示按位异或运算。

解决这个问题的关键在于利用异或运算的性质。

我们知道,如果 a ⊕ b = k a \oplus b = k ab=k,那么 a ⊕ k = b a \oplus k = b ak=b。这意味着,对于数组中的每个元素 a i a_i ai,只需要检查 a i ⊕ k a_i \oplus k aik 是否也在数组中出现过。

可以使用哈希表来存储每个数字出现的次数。遍历数组时,我们可以直接查询 a i ⊕ k a_i \oplus k aik 是否在哈希表中,如果在,就将其出现的次数加到答案中。

参考代码

🔒订阅专栏后解锁 → \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 1T1000),表示测试数据的组数。

接下来的 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 1x,y,z1000 1 ≤ k ≤ 1 0 9 1 \leq k \leq 10^9 1k109),分别表示阅读空间的三个边长和魔法书架的体积。

此外,保证所有测试数据中 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 1T1000
  • 1 ≤ x , y , z ≤ 1000 1 \leq x, y, z \leq 1000 1x,y,z1000
  • 1 ≤ k ≤ 1 0 9 1 \leq k \leq 10^9 1k109
  • 所有测试数据中 x x x 的和、 y y y 的和以及 z z z 的和均不超过 1000 1000 1000

题解

枚举

这道题的核心是枚举魔法书架的可能形状,并计算每种形状下的摆放方式数量。

首先,需要理解问题的本质:

  1. 书架的体积是固定的,但可以变形。
  2. 我们需要考虑书架的三种摆放方向。
  3. 对于每种形状,需要计算有多少种不同的摆放位置。

解题思路如下:

  1. 枚举书架的长和宽(设为 i i i j j j)。
  2. 根据体积 k k k 计算出高度 h = k / ( i ∗ j ) h = k / (i * j) h=k/(ij)
  3. 检查这个形状是否合法(高度是否为整数,是否小于等于阅读空间的高度)。
  4. 如果合法,计算这种形状下的摆放方式数量: ( x − i + 1 ) ∗ ( y − j + 1 ) ∗ ( z − h + 1 ) (x-i+1) * (y-j+1) * (z-h+1) (xi+1)(yj+1)(zh+1)
  5. 更新最大摆放方式数量。

参考代码

🔒订阅专栏后解锁 → \to 🧷春秋招笔试合集

🌲 03.魔法森林的秘密通道 评测链接🔗

在这里插入图片描述

问题描述

在一个神秘的魔法森林中,有 n n n 个魔法节点通过 n − 1 n-1 n1 条魔法通道相连,形成了一棵魔法树。每条魔法通道都有一个独特的魔力值 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 1n,q105),分别表示魔法节点的数量和魔法实验的次数。

接下来的 n − 1 n-1 n1 行,每行包含三个整数 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 1ui,vin u i ≠ v i u_i \neq v_i ui=vi 0 ≤ w i < 2 60 0 \leq w_i < 2^{60} 0wi<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 1un 0 ≤ k < 2 60 0 \leq k < 2^{60} 0k<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 1n,q105
  • 1 ≤ u i , v i ≤ n 1 \leq u_i, v_i \leq n 1ui,vin
  • u i ≠ v i u_i \neq v_i ui=vi
  • 0 ≤ w i < 2 60 0 \leq w_i < 2^{60} 0wi<260
  • 1 ≤ u ≤ n 1 \leq u \leq n 1un
  • 0 ≤ k < 2 60 0 \leq k < 2^{60} 0k<260

题解

哈希表+DFS

关键点 理解异或操作的性质:如果 a ⊕ b = c a \oplus b = c ab=c,那么 a ⊕ c = b a \oplus c = b ac=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]=kd[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)

参考代码

🔒订阅专栏后解锁 → \to 🧷春秋招笔试合集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

春秋招笔试突围

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值