华为 · 基础数学 · 算法编程题
华为 基础数学 q ≤ 200000 时限 1 秒 / 256 MB

题目描述

小红维护一个一元线性回归模型 y=ax+b 。系统需要在线处理两类操作:
- `ADD x y`:加入一个样本 (x,y) ;
- `QUERY x0`:使用当前全部样本拟合最小二乘直线,并输出在 x_0 处的预测值。
若当前没有样本,查询输出 `0.000000`。若所有样本的 x 都相同,最优斜率不唯一,此时规定使用常数模型 a=0 、 b 等于所有 y 的平均值。

输入输出

输入描述
第一行输入操作数 q 。
接下来 q 行,每行是一条 `ADD x y` 或 `QUERY x0` 操作。
保证 1 ≤ q ≤ 2 × 10^5 , -10^6 ≤ x,y,x_0 ≤ 10^6 ,所有需要维护的整数统计量均在 64 位有符号整数范围内。
输出描述
对于每个查询输出一行预测值,固定保留 6 位小数。

样例共 2 组

样例 1 · 每次新增样本后都使用当前全部样本重新确定回归直线。
输入
8
ADD 10 35
ADD 20 55
QUERY 15
ADD 30 78
QUERY 25
ADD 25 69
QUERY 40
QUERY 5
输出
45.000000
66.750000
100.285714
23.685714
样例 2 · 所有横坐标相同时使用纵坐标均值作为常数预测。
输入
7
ADD 12 30
ADD 12 36
QUERY 12
ADD 12 45
QUERY 100
QUERY -20
QUERY 0
输出
33.000000
37.000000
37.000000
37.000000

算法解析依据充分

考点:基础数学

数据规模 q ≤ 200000 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:q ≤ 200000
  • 元素值域:x ≤ 1e6,y ≤ 1e6,x_0 ≤ 1e6(注意整数类型选择,避免溢出)
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:基础数学

本题切入点

在线最小二乘:维护 n、Σx、Σy、Σx²、Σxy 五个量即可 O(1) 更新,查询时用 a=(nΣxy−ΣxΣy)/(nΣx²−(Σx)²)、b=ȳ−a·x̄ 直接算预测值;所有 x 相同时退化为常数模型。

把题目转化为数学表达式,用公式或性质直接求值。

思路框架(基础数学 通法 · 非本题专属)

  1. 先写出题目要求的数学表达式或所求量的定义。
  2. 利用代数变形、不等式、函数单调性等性质化简。
  3. 按题面给的精度要求输出(浮点题注意误差)。
  4. 数据范围大时,往往存在 O(1) 或 O(log n) 的数学解,不必模拟。

实现要点:浮点输出通常要求相对误差不超过 1e-7,注意用 double/long double 或高精度小数。

复杂度:时间 O(1) ~ O(log n) | 空间 O(1)

该范式的通法易错点

  • 整数除法丢精度;浮点比较直接用 == 。
  • 题目要求「相对误差」而非「绝对误差」,输出格式没对齐。

对照本题

  • 数据规模 q ≤ 200000,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 元素值域最大到 1e6 —— 求和 / 相乘时记得开 64 位整数。

样例解读

样例 1:输入 8 / ADD 10 35 / ADD 20 55 / QUERY 15 / ADD 30 78 / QUERY 25 / ADD 25 69 / QUERY 40 / QUERY 5 → 输出 45.000000 / 66.750000 / 100.285714 / 23.685714

每次新增样本后都使用当前全部样本重新确定回归直线。

样例 2:输入 7 / ADD 12 30 / ADD 12 36 / QUERY 12 / ADD 12 45 / QUERY 100 / QUERY -20 / QUERY 0 → 输出 33.000000 / 37.000000 / 37.000000 / 37.000000

所有横坐标相同时使用纵坐标均值作为常数预测。

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

本题来源:2026年-华为-06月03号AI岗。

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