【秋招笔试】9.14红薯秋招(已改编)-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
✨ 本系列打算持续跟新
春秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🍒 本专栏已收集
100+
套笔试题,笔试真题
会在第一时间跟新🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🍠 小红薯秋招笔试,来啦!!!
🍥 本次是异或(疑惑)数学场,第一题和第三题都是考察了了
异或
和 哈希表相关1️⃣ 哈希表和异或性质的结合
2️⃣ 枚举,很多小伙伴看到范围着么大就不敢写了,其实是可以暴力枚举滴
3️⃣ DFS+哈希表+异或的性质,其实思维难度不大的
🌈 01.相似文章配对 评测链接🔗
问题描述
LYA 是一位热爱写作的博主,她经常在社交平台上发布自己的文章。最近,她发现了一个有趣的现象:如果两篇文章的阅读量进行按位异或运算后恰好等于一个特定值 ,那么这两篇文章往往有相似的主题或风格。
现在,LYA 想要统计她所有文章中有多少对相似的文章。她需要你的帮助来完成这个任务。
输入格式
第一行包含两个整数 和 ,分别表示 LYA 发布的文章总数和判断相似文章的特定值。
第二行包含 个整数 ,表示每篇文章的阅读量。
输出格式
输出一个整数,表示相似文章的对数。
样例输入
5 2
1 3 5 7 9
样例输出
2
数据范围
题解
哈希表
要找出所有满足 的数对 ,其中 表示按位异或运算。
解决这个问题的关键在于利用异或运算的性质。
我们知道,如果 ,那么 。这意味着,对于数组中的每个元素 ,只需要检查 是否也在数组中出现过。
可以使用哈希表来存储每个数字出现的次数。遍历数组时,我们可以直接查询 是否在哈希表中,如果在,就将其出现的次数加到答案中。
参考代码
- Python
from collections import Counter
# 读取输入
n, k = map(int, input().split())
a = list(map(int, input().split()))
# 初始化计数器和答案
cnt = Counter()
ans = 0
# 遍历数组
for x in a:
# 统计满足条件的数对
ans += cnt[x ^ k]
# 更新当前数字的计数
cnt[x] += 1
# 输出结果
print(ans)
- Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 读取输入
int n = sc.nextInt();
int k = sc.nextInt();
// 初始化哈希表和答案
Map<Integer, Integer> cnt = new HashMap<>();
long ans = 0;
// 遍历数组
for (int i = 0; i < n; i++) {
int x = sc.nextInt();
// 统计满足条件的数对
ans += cnt.getOrDefault(x ^ k, 0);
// 更新当前数字的计数
cnt.put(x, cnt.getOrDefault(x, 0) + 1);
}
// 输出结果
System.out.println(ans);
}
}
- Cpp
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
// 初始化哈希表和答案
unordered_map<int, int> cnt;
long long ans = 0;
// 遍历数组
for (int i = 0; i < n; i++) {
int x;
cin >> x;
// 统计满足条件的数对
ans += cnt[x ^ k];
// 更新当前数字的计数
cnt[x]++;
}
// 输出结果
cout << ans << endl;
return 0;
}
📚 02.魔法书架摆放 评测链接🔗
问题描述
K小姐是一位热爱阅读的魔法师。她最近在自己的魔法塔顶层打造了一个特殊的阅读空间。这个空间是一个长方体,长宽高分别为 、 和 。由于K小姐使用了反重力魔法,书架可以悬浮在空中的任何位置。
K小姐新买了一个魔法书架,这个书架的体积为 ,但它可以变形成任何边长为正整数的长方体。K小姐想要将这个书架放入阅读空间,要求书架的各个边要与空间的边平行,并且每个角都要位于整数坐标上。
现在,K小姐想知道在所有可能的书架形状中,最多能有多少种不同的摆放方式。这里,旋转书架被视为一种摆放方向,我们需要找出三种摆放方向中摆放方式最多的那种情况的数量。
输入格式
第一行包含一个整数 (),表示测试数据的组数。
接下来的 行,每行包含四个整数 、、 和 (,),分别表示阅读空间的三个边长和魔法书架的体积。
此外,保证所有测试数据中 的和、 的和以及 的和均不超过 。
输出格式
对于每组测试数据,输出一行,包含一个整数,表示最多的摆放方式数量。如果无法将魔法书架放入阅读空间,则输出 。
样例输入
2
3 1 2 2
1 2 3 7
样例输出
4
0
数据范围
- 所有测试数据中 的和、 的和以及 的和均不超过
题解
枚举
这道题的核心是枚举魔法书架的可能形状,并计算每种形状下的摆放方式数量。
首先,需要理解问题的本质:
- 书架的体积是固定的,但可以变形。
- 我们需要考虑书架的三种摆放方向。
- 对于每种形状,需要计算有多少种不同的摆放位置。
解题思路如下:
- 枚举书架的长和宽(设为 和 )。
- 根据体积 计算出高度 。
- 检查这个形状是否合法(高度是否为整数,是否小于等于阅读空间的高度)。
- 如果合法,计算这种形状下的摆放方式数量:。
- 更新最大摆放方式数量。
参考代码
- Python
def solve():
# 读取输入
x, y, z, k = map(int, input().split())
ans = 0
# 遍历可能的长度
for i in range(1, x + 1):
if k % i != 0:
continue
# 遍历可能的宽度
for j in range(1, min(k // i + 1, y + 1)):
if k % (i * j) == 0:
# 计算高度
h = k // (i * j)
if h > z:
continue
# 更新最大摆放方式数量
ans = max(ans, (x - i + 1) * (y - j + 1) * (z - h + 1))
# 输出结果
print(ans)
# 读取测试用例数量
T = int(input())
# 处理每个测试用例
for _ in range(T):
solve()
- Java
import java.util.Scanner;
public class Main {
public static void solve(Scanner sc) {
// 读取输入
int x = sc.nextInt();
int y = sc.nextInt();
int z = sc.nextInt();
int k = sc.nextInt();
int ans = 0;
// 遍历可能的长度
for (int i = 1; i <= x; i++) {
if (k % i != 0) {
continue;
}
// 遍历可能的宽度
for (int j = 1; j <= Math.min(k / i, y); j++) {
if (k % (i * j) == 0) {
// 计算高度
int h = k / (i * j);
if (h > z) {
contin
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
这里收集了超全的刷题笔记,欢迎大家的订阅,会持续跟新的