华为 · 计算几何 · 算法编程题
华为 计算几何 时限 1 秒 / 256 MB

题目描述

在人脸识别等任务中,经常需要把一幅二维灰度图做仿射变换。给定输入图像矩阵 A、仿射矩阵 M 以及目标图像尺寸,采用前向映射方式把原图像像素投到新坐标系中,超出目标范围的像素丢弃,目标中未被覆盖处保持为 0。
·
仿射矩阵 M 为两行三列:
第一行 [a, b, tx],第二行 [c, d, ty]。
·
对原图中列坐标 x、行坐标 y(均从 0 开始计),对应的新坐标计算为:
x' = ax + by + tx
y' = cx + dy + ty
·
采用前向映射(source→target):对每个源像素计算 (x', y'),若 0 ≤ x' < out_width 且 0 ≤ y' < out_height,则把该像素值写入目标图像 (y', x');否则忽略。不做插值,按整数坐标落点覆盖。目标图像初始全 0。
·
输出为按行展开的一行数字(从第 0 行到最后一行,行内自左至右)。

输入输出

输入描述
· 第一行:a m o 三个整数,依次为输入图像 A 的行数 a、仿射矩阵行数 m(固定为 2)、以及后续“输出尺寸行数” o(固定为 1)。
· 接着 a 行:每行若干整数,表示该行像素值(列数由每行给出,行内列数保持一致)。
· 接着 m 行:每行 3 个整数,依次为仿射矩阵的参数 [a, b, tx] 与 [c, d, ty]。
· 最后 o 行:每行两个整数 out_height out_width,表示目标图像尺寸(行数、高度;列数、宽度)。
输出描述
一行:将目标图像按行展开输出,元素之间用空格分隔。

样例共 1 组

样例 1 · 图像 2×3;M 表示整体平移 (+1, +1);目标尺寸 3×4。 源像素 (x,y) 被移到 (x+1,y+1)。第 0 行与第 0 列无像素落点,因此为 0;其余位置由源像素覆盖。
输入
2 2 1
1 2 3
4 5 6
1 0 1
0 1 1
3 4
输出
0 0 0 0 0 1 2 3 0 4 5 6

算法解析依据一般

考点:计算几何

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:计算几何

把几何关系转成坐标运算,用整数运算避免浮点误差。

思路框架(计算几何 通法 · 非本题专属)

  1. 把点、向量、线段用坐标表示。
  2. 几何判定(平行、垂直、共线、相交)尽量用叉积/点积的整数形式:叉积为 0 即共线。
  3. 距离用平方比较,避免开方带来的浮点误差。
  4. 面积用叉积(鞋带公式)计算。

实现要点:叉积 cross = x1*y2 - x2*y1;用它判断顺时针/逆时针和共线。

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

该范式的通法易错点

  • 用浮点相等判断几何关系(应用整数叉积)。
  • 没考虑三点共线、重合等退化情况。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 2 2 1 / 1 2 3 / 4 5 6 / 1 0 1 / 0 1 1 / 3 4 → 输出 0 0 0 0 0 1 2 3 0 4 5 6

图像 2×3;M 表示整体平移 (+1, +1);目标尺寸 3×4。

源像素 (x,y) 被移到 (x+1,y+1)。第 0 行与第 0 列无像素落点,因此为 0;其余位置由源像素覆盖。

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

本题来源:2025年秋招-华为-10月23号留学生AI岗。

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