牛客练习赛106 药丸

牛客练习赛106 药丸

2022.12.02
与舍友四排玩了团体对抗的模式,练习赛就只有40分钟的剩余时间了。
牛客练习赛106 药丸_第1张图片

牛客练习赛106 药丸_第2张图片

题目描述

来源:牛客网

牛牛有 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 1n105 ,表示牛牛的属性数量。

接下来一行 n n n 个整数,第 i i i 个整数 − 1 0 9 ≤ a i ≤ 1 0 9 -10 ^ 9 \le a_i \le 10 ^ 9 109ai109, 表示牛牛第 i i i 个属性的初始值。

接下来一行 nn 个整数,第 ii 个整数 − 1 0 9 ≤ b i ≤ 1 0 9 -10 ^ 9 \le b_i \le 10 ^ 9 109bi109 表示牛牛第 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)

你可能感兴趣的:(牛客小白月赛,python,算法)