贝壳找房 · 计算几何 · 算法编程题
贝壳找房 计算几何 n ≤ 1e3 时限 1 秒 / 256 MB

题目描述

牛牛在玩一个线性魔塔游戏,地图是一条[-n,n]的直线段。
怪物在[-n,-1],[1,n]的每个位置都有分布。同向的怪物互相遮挡,比如如果要攻击位置为3的怪物,必须在攻击之前击杀位置为1和2的怪物,如果要攻击-2位置的怪物,也必须先击杀位置-1的怪物。
每一个怪物需要消耗勇者 a_i 的生命值,杀死某个怪物后会给勇者恢复 b_i 的血量。
勇者的生命值在非正的时候被认为牺牲,勇者的生命值没有上限。
牛牛想知道,勇士初始时拥有多少生命值,可以用策略杀完所有怪物。

输入输出

输入描述
第一行输入一个整数n,如题目中所示。
随后一行,输入2n个整数 a_i ,分别表示按[-n,-1],[1,n]的顺序,杀死怪物消耗的勇者的生命值。
随后一行,输入2n个整数 a_i ,分别表示按[-n,-1],[1,n]的顺序,杀死怪物后勇者恢复的生命值。
对于 20\% 的数据有 n≤ 5 。
对于 40\% 的数据有 n≤ 10 。
对于 60\% 的数据有 n≤ 30 。
对于 80\% 的数据有 n≤ 100 。
对于 100\% 的数据有 n≤ 1000,0 ≤ a_i,b_i≤ 10^6
输出描述
输出一行一个整数,表示答案。

样例共 1 组

样例 1 · 先击杀-1位置的怪物,生命值-5=2,恢复+20=22。 再击杀位置-2的怪物,生命值-6=16,恢复+1=17。 再击杀位置1的怪物,生命值-8=9,恢复+1=10。 再击杀位置2的怪物,生命值-9=1。 此时,勇者已经击杀了所有怪物。
输入
2
6 5 8 9
1 20 1 0
输出
7

算法解析依据一般

考点:计算几何

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

题目画像

  • 数据规模:n ≤ 1e3
  • 元素值域:a_i ≤ 1e6,b_i ≤ 1e6(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:计算几何

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

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

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

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

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

该范式的通法易错点

  • 用浮点相等判断几何关系(应用整数叉积)。
  • 没考虑三点共线、重合等退化情况。

对照本题

  • 数据规模 n ≤ 1e3,允许 O(n²);若 n ≤ 300,O(n³) 通常也跑得动,需看具体常数。
  • 元素值域最大到 1e6 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 2 / 6 5 8 9 / 1 20 1 0 → 输出 7

先击杀-1位置的怪物,生命值-5=2,恢复+20=22。

再击杀位置-2的怪物,生命值-6=16,恢复+1=17。

再击杀位置1的怪物,生命值-8=9,恢复+1=10。

再击杀位置2的怪物,生命值-9=1。

此时,勇者已经击杀了所有怪物。

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

本题来源:贝壳找房2023届校招开发类试卷。

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