华为笔试 华为秋招 华为笔试题 1010

笔试时间:2025年10月10日

往年笔试合集:

2023春招秋招笔试合集

2024春招秋招笔试合集

第一题:魔法学院

魔法学院的一名学员在早晨起床时,发现有人在他的被子上施加了 n 道昏睡魔法。每施加一道魔法后,该学员的清醒值会减少 a_i;在每次魔法结束后,他会进行抵抗,使清醒值增加 b_i(只有当该道魔法完全施法结束后才增加)。

初始时,学员的清醒值为 m。

学员可以自行安排这些魔法的施放顺序,但如果在施放某道魔法后,学员的清醒值 ≤ 0,则认为学员挣脱失败。

判断:是否存在一种施法顺序,使学员在整个过程中清醒值始终大于零并成功逃脱。

输入描述

第一行:一个整数 T(1≤T≤10),表示数据组数。

对于每组数据:

  • 第一行两个整数 n 和 m(1≤n≤100,1≤m≤10^6),分别表示施加的昏睡魔法次数和初始清醒值。
  • 接下来 n 行每行两个整数 a_i 和 b_i(1≤a_i,b_i≤10^6),分别表示该魔法减少的清醒值和抵抗后增加的清醒值。

注意:每一对(a_i, b_i)绑定,不可分开,但施法的顺序可以自由安排。

输出描述

对于每一组数据,如果学员能摆脱昏睡魔法,输出:Yes 否则输出:No

样例输入

2

2 5

3 2

4 5

2 5

3 2

4 2

样例输出

Yes

No

样例说明:

样例1:

  • 初始:清醒值 m = 5
  • 魔法1:(a_1 = 3, b_1 = 2)
  • 魔法2:(a_2 = 4, b_2 = 5)
  • 顺序1:5 - 3 + 2 = 4,4 - 4 + 5 = 5 ✅ 成功
  • 顺序2:5 - 4 + 5 = 6,6 - 3 + 2 = 5 ✅ 成功 至少有一种顺序成功,所以输出 Yes。

样例2:

  • 初始清醒值 m = 5
  • 魔法1:(a_1 = 3, b_1 = 2)
  • 魔法2:(a_2 = 4, b_2 = 2)
  • 顺序1:5 - 3 + 2 = 4,4 - 4 + 2 = 2 → 在施法过程中有一次 4 - 4 = 0,失败
  • 顺序2:5 - 4 + 2 = 3,3 - 3 + 2 = 2 → 在施法过程中有一次 3 - 3 = 0,失败 无论顺序如何均失败,输出 No。

参考题解

解题思路:

关键点:在施法结束后立即增加 b_i,所以危险时刻发生在施法刚结束但还没增加 b_i 的瞬间。

将魔法分为两类:

  1. 增益型魔法:b_i ≥ a_i,这类魔法总体上会增加或保持清醒值,按 a_i 从小到大排序(先处理消耗小的)
  2. 损耗型魔法:b_i < a_i,这类魔法总体上会减少清醒值,按 b_i 从大到小排序(优先选择抵抗效果好的)

C++:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void solve() {
    int x, y;
    cin >> x >> y;
    
    vector<pair<int, int>> g, b;
    
    for (int i = 0; i < x; i++) {
        int p, q;
        cin >> p >> q;
        if (q >= p) {
            g.push_back({p, q});
        } else {
            b.push_back({p, q});
        }
    }
    
    sort(g.begin(), g.end());
    sort(b.begin(), b.end(), [](const pair<int, int>& a, const pair<int, int>& b) {
        return a.second > b.second;
    });
    
    long long v = y;
    
    for (auto& [p, q] : g) {
        if (v <= p) {
            cout << "No" << endl;
            return;
        }
        v = v - p + q;
    }
    
    for (auto& [p, q] : b) {
        if (v <= p) {
            cout << "No" << endl;
            return;
        }
        v = v - p + q;
    }
    
    cout << "Yes" << endl;
}

int main() {
    int t;
    cin >> t;
    for (int i = 0; i < t; i++) {
        solve();
    }
    return 0;
}

Java:

import java.util.*;

public class Solution {
    public static void solve(Scanner sc) {
        int x = sc.nextInt();
        int y = sc.nextInt();
        
        List<int[]> g = new ArrayList<>();
        List<int[]> b = new ArrayList<>();
        
        for (int i = 0; i < x; i++) {
            int p = sc.nextInt();
            int q = sc.nextInt();
            if (q >= p) {
                g.add(new int[]{p, q});
            } else {
                b.add(new int[]{p, q});
            }
        }
        
        g.sort((a1, a2) -> a1[0] - a2[0]);
        b.sort((a1, a2) -> a2[1] - a1[1]);
        
        long v = y;
        
        for (int[] pair : g) {
            if (v <= pair[0]) {
                System.out.println("No");
                return;
            }
            v = v - pair[0] + pair[1];
        }
        
        for (int[] pair : b) {
            if (v <= pair[0]) {
                System.out.println("No");
                return;
            }
            v = v - pair[0] + pair[1];
        }
        
        System.out.println("Yes");
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int t = sc.nextInt();
        for (int i = 0; i < t; i++) {
            solve(sc);
        }
        sc.close();
    }
}

Python:

import sys

def solve():
    x, y = map(int, sys.stdin.readline().strip().split())
    g = []
    b = []
    
    for _ in range(x):
        p, q = map(int, sys.stdin.readline().strip().split())
        if q >= p:
            g.append((p, q))
        else:
            b.append((p, q))
    
    g.sort()
    b.sort(key=lambda t: t[1])
    b.reverse()
    
    v = y
    for p, q in g:
        if v <= p:
            print("No")
            return
        v = v - p + q
    
    for p, q in b:
        if v <= p:
            print("No")
            return
        v = v - p + q
    
    print("Yes")

t = int(sys.stdin.readline().strip())
for _ in range(t):
    solve()

第二题:坐火车iv

某旅行线路上有一辆有 M 节车厢的列车,所有车厢中都没人,现有 N 个旅行团需要搭乘该线路,其 ID 为 1~N。请给出具体的乘坐方案,满足使得各车厢间的乘客数量差异最小。

说明:乘客最多的车厢中的人数记作 max,乘客最少的车厢中的人数记作 min,需要满足 max-min 最小。

旅行团乘坐列车需要满足如下要求:

  1. 对于任意 i < j,车厢 i 中的任意旅行团的 ID 小于车厢 j 中任意旅行团的 ID。
  2. 同个车厢内的旅行团,他们的 ID 是连续的。
  3. 同个旅行团的成员必须在一个车厢内。

注:当只有一个车厢时,该车厢的乘客数既是最大乘客数,也是最小乘客数。

输入描述

第1行:N M,其中

  • N 是旅行团个数,范围是 1 ≤ N ≤ 10^4
  • M 是车厢个数,范围是 1 ≤ M ≤ min(N, 1000)

第2行:P_1 P_2 ... P_N,每个数字代表一个旅行团的成员个数,成员个数范围是 1 ≤ P_i ≤ 10^4

输出描述

输出乘客最多的车厢中的人数 max。

样例输入

3 3

1 6 4

样例输出

6

样例说明1: N=3,M=3:有3个旅行团,列车有3节车厢。成员人数分别为[1,6,4]。每个车厢都有旅行团时车厢人数差异才可能最小,考虑以下方案:

  • 车厢1:团1,人数1
  • 车厢2:团2,人数6
  • 车厢3:团3,人数4 可知乘客最多的车厢人数为6。

参考题解

解题思路:

问题转化为:将数组P切成M段,使得最大段和最小。 这是一个经典的"最小化最大段和"问题,可以用二分答案解决。

二分搜索策略:

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

2025 春招笔试合集 文章被收录于专栏

2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南

全部评论

相关推荐

作为一名正在摸索入行的&nbsp;AI&nbsp;应用工程师新人,我把近期收集的资料做了一次系统梳理,聚焦岗位核心能力,把从大模型应用开发、模型调优到工程化部署的全链路技术栈拆解开。一方面给自己定一个清晰的学习方向,避免在海量知识点里越学越乱;另一方面也分享给同样在入门的牛友,一起参考、一起进步。一、核心应用技术1.&nbsp;提示工程&nbsp;Prompt&nbsp;Engineering需要熟练掌握角色设定、思维链&nbsp;CoT、零样本&nbsp;/&nbsp;少样本学习、格式约束、抗幻觉等通用技巧;针对&nbsp;GPT-4o、LLaMA&nbsp;3、Qwen、Claude&nbsp;等不同模型做提示词适配,根据问答、摘要、翻译、代码生成等任务做针对性优化。实战上要能搭建可复用的提示词模板库,支持参数化调用和效果评估,解决模型输出不稳定、格式乱、语义跑偏等问题。2.&nbsp;检索增强生成&nbsp;RAGRAG&nbsp;是解决大模型幻觉、落地知识密集型场景的关键,要求能完整搭建一套端到端系统。核心流程包括:文档处理:多格式加载(PDF/Word/TXT/&nbsp;网页)、多种文本切分策略向量工程:嵌入模型选型、向量生成与效率优化检索优化:向量检索、混合检索、重排序,提升召回与准确率生成优化:上下文压缩、查询改写、检索结果融合进阶方向可以了解模块化&nbsp;RAG、GraphRAG、知识库增量更新等方案。3.&nbsp;LLM&nbsp;Agent&nbsp;开发基于&nbsp;LangChain&nbsp;/llamaIndex&nbsp;搭建&nbsp;Agent,掌握任务拆解、工具调用、结果整合、记忆管理的完整流程;能自定义工具(API、数据库、计算器、外部服务等),设计调用逻辑与失败重试机制。实战要求实现多工具协同、长短记忆管理,能处理数据分析&nbsp;+&nbsp;报告生成、多轮复杂问答等场景。二、模型调优与后训练1.&nbsp;监督微调&nbsp;SFT能完整设计&nbsp;SFT&nbsp;流程:数据集构建与清洗、模型选型、学习率等超参调优;熟练使用&nbsp;LoRA&nbsp;/&nbsp;QLoRA&nbsp;轻量化微调,基于&nbsp;PEFT&nbsp;库在普通显卡上完成训练,控制显存和成本。最终要能在分类、对话、意图识别等任务上落地微调,并输出对比评估结果。2.&nbsp;强化学习与偏好对齐了解&nbsp;RLHF、DPO&nbsp;的基本思路,能用&nbsp;TRL&nbsp;等开源库做简单的偏好对齐训练,减少模型幻觉、违规输出,让生成内容更贴合业务规则。3.&nbsp;模型压缩与推理优化掌握&nbsp;INT4/INT8&nbsp;量化、剪枝、知识蒸馏,用&nbsp;BitsAndBytes、GPTQ&nbsp;等工具在可控效果损失下压缩模型;能将模型转为&nbsp;ONNX&nbsp;/&nbsp;TensorRT,支持本地与边缘部署,提升推理速度。三、工具与框架体系语言与基础:Python、Pandas、Numpy&nbsp;数据处理深度学习框架:PyTorch、TensorFlow,Hugging&nbsp;Face&nbsp;全套生态应用开发框架:LangChain、llamaIndexAPI&nbsp;服务:FastAPI、Flask&nbsp;封装接口,对接&nbsp;OpenAI、智谱、通义千问等商用&nbsp;API四、数据存储与检索结构化存储:MySQL/PostgreSQL&nbsp;存用户、配置、日志缓存:Redis&nbsp;做缓存、会话管理、降低重复调用成本搜索引擎:Elasticsearch&nbsp;做关键词检索向量库:FAISS、Milvus&nbsp;搭建向量知识库,支撑高并发&nbsp;RAG&nbsp;检索五、工程化部署与监控Docker&nbsp;容器化打包,docker-compose&nbsp;多组件部署日志与监控:ELK、Prometheus&nbsp;+&nbsp;Grafana&nbsp;监控接口、推理性能、资源占用安全合规:密钥加密、权限控制、数据脱敏,满足企业安全要求六、前沿技术与行业认知持续关注&nbsp;LLaMA&nbsp;3、Qwen、Mistral&nbsp;等开源模型迭代,以及&nbsp;LangChain&nbsp;等工具更新;了解多模态、智能体进化、Modular&nbsp;RAG、知识图谱融合等方向;结合企业服务、智能制造、智能客服等落地案例,学会把技术和业务场景结合,给出可落地方案。
从事AI岗需要掌握哪些技...
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

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