给定一个问题:
你有一定数量的士兵。
每个士兵都有一个给定的等级(有些是军官、中士等)。现在他们要去杀了一些人。
你的弹药数量有限。根据等级,每个人都会得到一盒弹药。士兵们站成一条直线。
如果一个较低等级的人在他旁边,则必须给较高等级的人更多的弹药。
每个人必须至少得到一个盒子。
示例:使用从 1 向上的数字来表示rank: 4 2 3 2 2 1 3 6
. 等效的弹药箱是:2 1 2 1 2 1 2 3
.
我想出弹药清单的最快方法是取前三个等级并将它们相互比较(即从示例中,我选择4 2 3
)。接下来我增加一(即2 3 2
)并再次进行比较。显然,这需要很多时间。有没有更快的方法?
注意:同级别的士兵并排站在一起并不在乎每个人有多少弹药。
soldier_num = int(input())
i = 0
rating_array = []
ammo_array = []
can_can = soldier_num
while(i < soldier_num):
rating_array.append(int(input()))
ammo_array.append(1)
i += 1
i = 0
while(i < soldier_num):
if(i == 0):
if((rating_array[i] > rating_array[i+1]) and (ammo_array[i] <= ammo_array[i+1])):
ammo_array[i] += 1
i = i-1
can_can += 1
if(0<i<(soldier_num-1)):
if((rating_array[i] > rating_array[i+1]) and (ammo_array[i] <= ammo_array[i+1])):
ammo_array[i] += 1
i = i-1
can_can += 1
elif((rating_array[i] > rating_array[i-1]) and (ammo_array[i] <= ammo_array[i-1])):
ammo_array[i] += 1
i = i-1
can_can += 1
elif((rating_array[i] < rating_array[i-1]) and (ammo_array[i] >= ammo_array[i-1])):
ammo_array[i-1] += 1
i = i-1
can_can += 1
elif((rating_array[i] < rating_array[i+1]) and (ammo_array[i] >= ammo_array[i-1])):
ammo_array[i+1] += 1
i = i-1
can_can += 1
i += 1
if(i == (soldier_num-1)):
if((rating_array[i] > rating_array[i-1]) and (ammo_array[i] <= ammo_array[i-1])):
ammo_array[i] += 1
can_can += 1
print(can_can)