🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试
💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历
✨ 本系列打算持续跟新
春秋招笔试题
👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸
✨ 笔试合集传送们 -> 🧷春秋招笔试合集
🍒 本专栏已收集
100+
套笔试题,笔试真题
会在第一时间跟新🍄 题面描述等均已改编,如果和你笔试题看到的题面描述不一样请理解,做法和题目本质基本不变。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力 💞
🍠 得物秋招笔试,来啦!!!
🍥 本次的T3有点困难,暂时不会正确的做法
1️⃣ 正则表达式+快速幂
2️⃣ 试除法求约数
3️⃣ 贪心+二分答案+数据结构, 比较难想
🪙 01.多项式系数计算器
问题描述
K小姐是一位热爱代数的高中生。最近,她在研究多项式时遇到了一个有趣的问题。她有一个由若干个一次多项式因式相乘组成的表达式,每个因式的形式都是 ( x + d ) (x + d) (x+d) 或 ( x − d ) (x - d) (x−d),其中 d d d 是一个非负整数。K小姐想知道,当这个表达式完全展开后, x x x 的一次项系数是多少。
由于结果可能很大,K小姐只需要知道系数对 10007 10007 10007 取模后的结果。你能帮助K小姐设计一个多项式系数计算器来解决这个问题吗?
输入格式
输入一行,包含一个字符串,表示K小姐的多项式表达式。字符串长度为 n n n ( 5 ≤ n ≤ 10000 ) (5 \leq n \leq 10000) (5≤n≤10000)。
输出格式
输出一个整数,表示展开后 x x x 的一次项系数对 10007 10007 10007 取模的结果。
样例输入
(x-1)(x+5)
样例输出
4
样例输入
(x-1)(x+2)(x+3)
样例输出
1
数据范围
- 5 ≤ n ≤ 10000 5 \leq n \leq 10000 5≤n≤10000
- 每个因式中的常数项 d d d 满足 0 < d ≤ 9 0 < d \leq 9 0<d≤9
题解
正则表达式+快速幂
多项式展开性质
对于形如 ( x + a 1 ) ( x + a 2 ) . . . ( x + a n ) (x+a_1)(x+a_2)...(x+a_n) (x+a1)(x+a2)...(x+an) 的多项式,展开后 x x x 的一次项系数等于: ∑ i = 1 n ∏ j ≠ i a j \sum_{i=1}^n \prod_{j \neq i} a_j ∑i=1n∏j=iaj ,写成另一种形式, ∑ i = 1 n P a i \sum_{i=1}^n \frac{P}{a_i} ∑i=1naiP,其中 P = a 1 ⋅ a 2 ⋯ a n P = a_1 \cdot a_2 \cdots a_n P=a1⋅a2⋯an
乘法逆元
在模运算中,除法可以通过乘法逆元实现。
对于质数模数 p p p, a a a 的乘法逆元 a − 1 a^{-1} a−1 满足: a ⋅ a − 1 ≡ 1 ( m o d p ) a \cdot a^{-1} \equiv 1 \pmod{p} a⋅a−1≡1(modp)可以通过费马小定理计算: a − 1 ≡ a p − 2 ( m o d p ) a^{-1} \equiv a^{p-2} \pmod{p} a−1≡ap−2(modp)
算法实现
a) 使用正则表达式提取所有常数项
a
i
a_i
ai。
b) 计算所有
a
i
a_i
ai 的乘积
P
P
P,同时对
10007
10007
10007 取模。
c) 对每个
a
i
a_i
ai,计算
P
a
i
m
o
d
10007
\frac{P}{a_i} \bmod 10007
aiPmod10007,使用乘法逆元实现除法。
d) 将所有结果相加并对
10007
10007
10007 取模,得到最终答案。
参考代码
🔒订阅专栏后解锁 → \to → 🧷春秋招笔试合集
🪷 02.古董花瓶的共同特征
问题描述
K小姐是一位古董收藏家,她最近获得了四件珍贵的古代花瓶。这些花瓶来自不同的朝代,但K小姐注意到它们可能有一些共同的特征。每个花瓶都有一个特征值,K小姐想知道这四个花瓶是否存在一个大于1的共同特征因子。如果存在,她想找出最小的那个;如果不存在,她会认为这些花瓶之间没有特殊联系。
输入格式
第一行输入一个正整数 T T T,表示测试数据组数。
接下来 T T T 行,每行输入四个正整数 a a a、 b b b、 c c c、 d d d,分别表示四个花瓶的特征值。
输出格式
输出 T T T 行,每行一个整数,表示四个花瓶的最小共同特征因子(大于1)。如果不存在这样的因子,输出 − 1 -1 −1。
样例输入
2
2 3 5 7
4 8 16 32
样例输出
-1
2
数据范围
- 1 ≤ T ≤ 10 1 \leq T \leq 10 1≤T≤10
- 1 ≤ a , b , c , d ≤ 1 0 9 1 \leq a, b, c, d \leq 10^9 1≤a,b,c,d≤109
题解
试除法求约数
最大公约数做多了,最小公约数 ( ≠ 1 \neq 1 =1)来了你还会吗?
对最小的数求出他的所有约数,然后依次判断是否可以被成为其他所有数的公约数即可
时间复杂度:
O
(
T
(
m
i
n
(
a
,
b
,
c
,
d
)
)
O(T\sqrt({min(a, b, c, d)})
O(T(min(a,b,c,d)) + 排序复杂度(可以不用
)
参考代码
🔒订阅专栏后解锁 → \to → 🧷春秋招笔试合集
📦 03.包裹分配问题
问题描述
LYA 公司是一家专门从事包裹配送的物流公司。在一次大型促销活动中,公司需要处理 n n n 个包裹的配送。每个包裹都有特定的长度 a i a_i ai 和宽度 b i b_i bi。
为了确保包裹的安全运输,公司决定为每个包裹配备一个保护箱。仓库里有 n n n 种不同类型的保护箱,每种保护箱都有一个基础长度 c j c_j cj 和基础宽度 d j d_j dj。为了适应不同大小的包裹,保护箱可以按比例放大,放大系数用 k k k 表示。也就是说,实际使用时,第 j j j 种保护箱的长度为 c j ∗ k c_j * k cj∗k,宽度为 d j ∗ k d_j * k dj∗k。
一个保护箱只有在其长度大于等于包裹长度,且宽度大于等于包裹宽度时,才能被用来保护该包裹。每个保护箱只能用于一个包裹,多余的部分会被裁掉。
现在,LYA 公司的物流主管想知道,要成功配送所有 n n n 个包裹,保护箱的最小放大系数 k k k 应该是多少?
输入格式
第一行输入一个正整数 n n n,表示包裹的数量。
接下来 n n n 行,每行包含四个正整数 a i , b i , c i , d i a_i, b_i, c_i, d_i ai,bi,ci,di:
- a i a_i ai 和 b i b_i bi 分别表示第 i i i 个包裹的长度和宽度。
- c i c_i ci 和 d i d_i di 分别表示第 i i i 种保护箱的基础长度和基础宽度。
输出格式
输出一个正整数,表示最小的放大系数 k k k。
样例输入
2
1 1 2 2
2 4 2 2
样例输出
2
数据范围
- 1 ≤ n ≤ 50000 1 \leq n \leq 50000 1≤n≤50000
- 1 ≤ a , b , c , d ≤ 100000 1 \leq a, b, c, d \leq 100000 1≤a,b,c,d≤100000
注意:本题不保证 a i > b i a_i > b_i ai>bi 或 c i > d i c_i > d_i ci>di,但可以认为包裹的长度 a i a_i ai 只能与保护箱的长度 c i c_i ci 比较,包裹的宽度 b i b_i bi 只能与保护箱的宽度 d i d_i di 比较。
题解
二分答案+贪心+ 数据结构
这道题目本质上是一个二分答案和贪心,是一道 AtCoder
的改编题。
-
二分查找:
二分答案 k k k。对于每个 k k k,检查是否所有包裹都能被保护箱覆盖。 -
贪心:
对于给定的 k k k,需要判断是否所有包裹都能被覆盖。这里可以使用贪心策略:- 将所有放大后的保护箱和包裹按照(长、宽)倒序排序,具体实现看代码。
- 从大到小遍历每个包裹,为其找到能覆盖它的最小保护箱,这里可以二分。
-
数据结构:
Cpp中使用multiset
来存储保护箱,这样可以在 log n \log n logn 的复杂度,进行查找和删除操作。实际考试的时候这个复杂度对于Java和python选手比较危险,可以自行使用
Treemap
和SortedList
来实现。 -
时间复杂度分析:
- 二分查找的复杂度是 O ( log M ) O(\log M) O(logM),其中 M M M 是 k k k 的上界。
- 每次检查的复杂度是
O
(
n
log
n
)
O(n \log n)
O(nlogn),需要对
n
n
n 个包裹进行处理,每次处理需要在
multiset
中查找。 - 总的时间复杂度是 O ( n log n log M ) O(n \log n \log M) O(nlognlogM)。
参考代码
🔒订阅专栏后解锁 → \to → 🧷春秋招笔试合集