牛牛在玩一个线性魔塔游戏,地图是一条[-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
输出一行一个整数,表示答案。
2 6 5 8 9 1 20 1 0
7
考点:计算几何
数据规模 n ≤ 1e3 | 限制 1 秒 / 256MB | 标准输入输出
参考方向:计算几何
把几何关系转成坐标运算,用整数运算避免浮点误差。
思路框架(计算几何 通法 · 非本题专属)
实现要点:叉积 cross = x1*y2 - x2*y1;用它判断顺时针/逆时针和共线。
复杂度:时间 O(n) ~ O(n²) | 空间 O(n)
该范式的通法易错点
对照本题
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 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届校招开发类试卷。