牛客练习赛106 药丸
2022.12.02
与舍友四排玩了团体对抗的模式,练习赛就只有40分钟的剩余时间了。
题目描述
来源:牛客网
牛牛有 n n n 个属性,第 i i i 个属性的初始值为 a i a_i ai ,牛牛想把第 i i i 个属性的值变为目标值 b i b_i bib。
现在牛牛 2 × n 2 \times n 2×n 种不同颜色的药丸(每种药丸都有无穷多个),吃一个药丸会产生一个效果。同种颜色的药丸效果相同,不同颜色的药丸效果不同。
每种颜色的药丸对应以下效果之一:
- 第 1 个属性值 + 1
- 第 1 个属性值 - 1
- 第 2 个属性值 + 1
- 第 2 个属性值 - 1
- …
- 第 n 个属性值 + 1
- 第 n 个属性值 - 1
以上描述了 2 × n 2 \times n 2×n 种效果,它们与 2 × n 2 \times n 2×n 种颜色的药丸一一对应。
开始时牛牛并不知道药丸颜色与药丸效果的对应关系。若牛牛吃一个药丸,则会获得该颜色药丸对应的效果,并且知道该颜色的药丸对应的效果。
牛牛通过吃药丸来改变自己的属性值。求在最坏的情况下,牛牛要吃多少药丸才能将所有属性从初始值变为目标值。
(若初始时初始值均等于目标值,则不需要吃药丸,输出 0)
输入描述:
第一行输入一个正整数 1 ≤ n ≤ 1 0 5 1 \le n \le 10 ^ 5 1≤n≤105 ,表示牛牛的属性数量。
接下来一行 n n n 个整数,第 i i i 个整数 − 1 0 9 ≤ a i ≤ 1 0 9 -10 ^ 9 \le a_i \le 10 ^ 9 −109≤ai≤109, 表示牛牛第 i i i 个属性的初始值。
接下来一行 nn 个整数,第 ii 个整数 − 1 0 9 ≤ b i ≤ 1 0 9 -10 ^ 9 \le b_i \le 10 ^ 9 −109≤bi≤109 表示牛牛第 i i i 个属性的目标值。
输出描述:
输出一个整数 m m m,表示在最坏的情况下,牛牛要吃多少药丸才能将所有属性从初始值变为目标值。
示例1
输入
2
1 3
1 4
输出
5
说明
在样例中,牛牛有 2 个属性值分别为 1 3,目标值分别为 1 4。
在最坏情况下:
牛牛吃的第一个胶囊使得其第一个属性值下降 1,牛牛的属性值变为:0 3。此时牛牛肯定不会再吃该颜色的药丸了。
牛牛吃的第二个胶囊使得其第二个属性值下降 1,牛牛的属性值变为:0 2。此时牛牛肯定不会再吃该颜色的药丸了。
牛牛吃的第三个胶囊使得其第一个属性值增加 1,牛牛的属性值变为:1 2。牛牛的第一个属性值以及足够,此时牛牛肯定不会再吃该颜色的药丸了。
牛牛吃的第四个胶囊使得其第二个属性值增加 1,牛牛的属性值变为:1 3。
此时牛牛可以再吃一个同上颜色的药丸,使得其第二个属性值增加 1,变为 4。
共需要 5 个药丸。
示例2
输入
3
1 1 4
5 1 4
输出
10
解题思路
每个(目标值 - 初始值)的绝对值 + 2,最后进行求和。
n = int(input()) # 属性值
list1 = list(map(int, input().split())) # 初始值
list2 = list(map(int, input().split())) # 目标值
res1 = 0
if list1 == list2: # 目标与初始值相同,输出0
print(0)
else:
for i in range(n):
res1 += abs(list1[i] - list2[i]) + 2 # 每个(目标值 - 初始值)的绝对值 + 2
print(res1)