【备战秋招】小米25届秋招笔试真题第二套

✅ 秋招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

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

🌸 目前本专栏已经上线90+套真题改编解析,后续会持续更新的

春秋招笔试机考合集 -> 互联网必备刷题宝典🔗

题目一:括号匹配大师

1️⃣:理解卡特兰数的组合数学含义,计算合法括号序列数量

2️⃣:考虑多种括号类型的选择,使用快速幂计算

3️⃣:结合卡特兰数递推公式和模逆元进行高效计算

难度:中等

这道题目考查卡特兰数的经典应用。关键在于认识到长度为 的合法括号串需要 对括号,每对括号有 种选择。通过卡特兰数计算配对方案数,再乘以类型选择数,得到最终答案

题目二:小基的魔法硬币翻转

1️⃣:将问题转化为最大子段和问题,0视为+1,1视为-1

2️⃣:使用Kadane算法找到最大子段和及其位置

3️⃣:结合原始1的数量计算最终答案

难度:中等

这道题目巧妙地将硬币翻转问题转化为经典的最大子段和问题。通过合理的转换(0→+1,1→-1),使得原问题变为寻找和最大的连续子数组。Kadane算法能够在 时间内高效解决,同时记录最优区间位置。

01. 括号匹配大师

问题描述

小基 是一名程序员,她最近在研究括号匹配问题。在编程语言中,常见的括号包括圆括号 、方括号 、花括号 等。小基 发现,一个合法的括号串需要满足以下三个条件之一:

  1. 该括号串是空串。
  2. 该括号串形如 ,其中 是一对匹配的括号(即 为左括号, 为右括号),而 是一个合法的括号串。
  3. 该括号串形如 ,其中 都是合法的括号串。

现在,小基 想知道:给定可使用的括号种类数 和括号串长度 ,有多少种不同的合法括号串可以组成?由于答案可能很大,小基 只需要知道答案对 取模的结果。

输入格式

输入一行,包含两个正整数 ,分别表示括号串的长度和允许使用的括号种类数。

输出格式

输出一个整数,表示长度为 的合法括号串的数量对 取模的结果。

样例输入

6 2

样例输出

40

数据范围

  • 输入保证 为偶数
样例 解释说明
样例1 时,我们有 种括号可以使用,需要组成长度为 的合法括号串。根据卡特兰数计算,,再乘以 ,得到答案

题解

这道题本质上是一个组合数学问题,核心是卡特兰数的应用。

首先理解什么是合法的括号串。从题目描述可以看出,合法括号串必须满足每个左括号都有对应的右括号匹配,且在任意前缀中,左括号数量不少于右括号数量。

关键观察:对于长度为 的括号串,我们实际上需要 对括号。每对括号的类型有 种选择。

解题思路分为两个部分:

  1. 计算括号配对方案数:这就是经典的卡特兰数问题。对于 对括号,合法的配对方案数为第 个卡特兰数 。卡特兰数可以用递推公式计算:,其中

  2. 计算括号类型选择数:每对括号都有 种类型可以选择,所以总的类型选择方案数为

最终答案就是:

算法步骤:

  1. 初始化卡特兰数
  2. 通过循环计算第 个卡特兰数
  3. 计算 次幂
  4. 将两者相乘得到最终结果

时间复杂度为 ,空间复杂度为 ,对于给定的数据范围完全可以接受。

参考代码

  • Python
import sys
input = lambda: sys.stdin.readline().strip()

def solve():
    # 读取输入数据
    n, k = map(int, input().split())
    mod = 998244353
    
    # 计算模逆元的快速幂函数
    def pow_mod(base, exp, m):
        res = 1
        base %= m
        while exp > 0:
            if exp & 1:
                res = res * base % m
            base = base * base % m
            exp >>= 1
        return res
    
    # 计算逆元
    def inv(x):
        return pow_mod(x, mod - 2, mod)
    
    # 计算第 n/2 个卡特兰数
    m = n // 2
    cat = 1
    for i in range(m):
        cat = cat * (4 * i + 2) % mod
        cat = cat * inv(i + 2) % mod
    
    # 计算 k^(n/2)
    k_pow = pow_mod(k, m, mod)
    
    # 最终结果
    ans = cat * k_pow % mod
    print(ans)

solve()
  • Cpp
#include 
using namespace std;

const int MOD = 998244353;

// 快速幂函数
long long qpow(long long a, long long b) {
    long long res = 1;
    a %= MOD;
    while (b > 0) {
        if (b & 1) res = res * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return res;
}

// 计算逆元
long long inv(long long x) {
    return qpow(x, MOD - 2);
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, k;
    cin >> n >> k;
    
    int m = n / 2;
    long long cat = 1;
    
    // 计算卡特兰数
    for (int i = 0; i < m; i++) {
        cat = cat * (4LL * i + 2) % MOD;
        cat = cat * inv(i + 2) % MOD;
    }
    
    // 计算 k 的 m 次幂
    long long k_pow = qpow(k, m);
    
    // 输出结果
    long long ans = cat * k_pow % MOD;
    cout << ans << endl;
    
    return 0;
}
  • Java
import java.util.Scanner;

public class Main {
    static final int MOD = 998244353;
    
    // 快速幂函数
    static long powMod(long base, long exp) {
        long result = 1;
        base %= MOD;
        while (exp > 0) {
            if ((exp & 1) == 1) {
                result = result * base % MOD;
            }
            base = base * base % MOD;
            exp >>= 1;
        }
        return result;
    }
    
    // 计算逆元
    static long modInv(long x) {
    

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

07-07 11:00
已编辑
西南大学 后端
冰冰可爱:其实就是不烂大街的同时自己对项目有点深入的了解,为什么选这个不选那个,选这个好在哪,还有没有更好,有思考深度的项目确实能帮自己在面试的时候更加加分,就有脱颖而出的机会,但对学生来说面试的要求越来越高了,也不是好事
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务