华为 · 数论 · 算法编程题
华为 数论 T ≤ 100 时限 2 秒 / 256 MB

题目描述

小红正在调试一个智能家居中的温控预测模块。系统每隔一段时间采集一批房间的环境特征,包括室内温度、室外温度、空调功率、门窗开合状态和室内人员数量。为了模拟模型如何记住温度变化趋势,小红决定手动实现一个简化版 LSTM 前向传播过程。
给定长度为 T 的输入序列,每个时间步包含 B 个样本,每个样本有 D=5 个特征。隐藏层维度为 H。初始隐藏状态 h 和细胞状态 c 均为 0。
每个时间步按如下公式更新,其中 sigmoid(x)=1/(1+e^(-x)),tanh 为双曲正切函数:
1. 输入门:i_t = sigmoid(x_t W_i + h_{t-1} U_i + b_i)
2. 遗忘门:f_t = sigmoid(x_t W_f + h_{t-1} U_f + b_f)
3. 输出门:o_t = sigmoid(x_t W_o + h_{t-1} U_o + b_o)
4. 候选状态:g_t = tanh(x_t W_g + h_{t-1} U_g + b_g)
5. 细胞状态:c_t = f_t * c_{t-1} + i_t * g_t
6. 隐藏状态:h_t = o_t * tanh(c_t)
请输出所有时间步的隐藏状态,以及最后一个时间步结束后的细胞状态。

输入输出

输入描述
第一行: T, 5, D, H 共 4 个正整数,其中 T 为序列大小, B 为批次大小(时间), D 为输入特征维度, H 为隐藏层维度,取值范围为 0 < T <= 100 , 0 < B <= 100 , D=5 , 0 < H <= 10 。
接下来 T 行:每行包含 B × D 个浮点数,表示输入序列,按时间步顺序,每个时间步的数据按批次顺序排列(即先第 1 个房间的 D 个特征,再第 2 个房间的 D 个特征,依此类推)。
最后四行:分别对应输入门、遗忘门、输出门和候选细胞状态的参数,每行包含:
- 输入权重( D × H )、隐藏权重( H × H )、偏置( H )的元素数
- 所有参数按行优先顺序展平
注:所有输入的每个数之间用一个空格分隔,每行末尾无多余空格
输出描述
第一行:所有时间步的隐藏状态( T × B × H ),按时间步顺序展平输出
第二行:最终细胞状态( B × H ),按批次顺序展平输出
注:所有浮点数保留 4 位小数(四舍五入),每个数之间用一个空格分隔,每行末尾无多余空格

样例共 1 组

样例 1
输入
1 1 5 2
2.5 5.0 3.2 5.0 1
0.1 0.1 0.3 3.4 0.5 0.4 0.7 0.3 0.2 1.0 0.7 0.5
0.8 1.0 1.1 1.4
0.1 0.7 0.1 1.4 0.5 0.6 0.3 0.2 0.3 1.0 0.8 0.7
0.7 1.1 1.2 1.2
0.1 0.8 3.3 0.4 0.1 0.5 0.4 0.8 0.9 1.0 0.6 0.9
0.5 1.2 1.1 1.5
0.1 0.1 0.3 0.4 0.5 0.6 0.6 0.8 0.2 1.0 0.7 0.1
0.9 1.3 1.6 1.2
输出
0.7615 0.7616
0.9997 1.0000

算法解析依据一般

考点:数论

数据规模 T ≤ 100 | 限制 2 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:T ≤ 100
  • 元素值域:B ≤ 100,H ≤ 10(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 源站时限:2 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:数论

围绕整除、质因数、同余的经典结论与筛法。

思路框架(数论 通法 · 非本题专属)

  1. 先做质因数分解(试除到 √n,或预处理筛出 1e6 内质数)。
  2. 按题意套结论:约数个数 = Π(e_i+1);gcd / lcm 用辗转相除法。
  3. 涉及大数取模时,每一步运算后都取模,避免溢出。
  4. 需要区间内质数时用埃氏筛 / 线性筛。

实现要点:模运算规律:(a+b)%m = ((a%m)+(b%m))%m,乘法则同理;减法要 +m 防止负数。

复杂度:时间 O(√n) 分解 / O(n log log n) 筛 | 空间 O(n) 筛表

该范式的通法易错点

  • 取模后相减为负数没处理。
  • a*b 在取模前就溢出了。

对照本题

  • 数据规模 T ≤ 100,允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 元素值域最大到 100 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:1 1 5 2 / 2.5 5.0 3.2 5.0 1 / 0.1 0.1 0.3 3.4 0.5 0.4 0.7 0.3 0.2 1.0 0.7 0.5 / 0.8 1.0 1.1 1.4 / 0.1 0.7 0.1 1.4 0.5 0.6 0.3 0.2 0.3 1.0 0.
  • 输出:0.7615 0.7616 / 0.9997 1.0000

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年-华为-04月29号AI岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解