描述
寒冷的冬天,小屋的屋檐下倒挂着 n根冰柱,从左到右依次排列。第 i根冰柱初始的高度为a_i厘米(a_i>0)。突然刮起一阵大风,使得冰柱开始消融,并且遵循以下规则:
假设大风的风力为 k。
1.消融顺序:每过一分钟,风会按从左到右(即从第1根冰柱到第 n根冰柱)的顺序使冰柱消融。
2.消融条件:对于第 i根冰柱,如果它是最右边的冰柱(即i = n),或者它的当前高度严格大于右侧相邻冰柱的当前高度(即a_i>a_(i+1)),那么这根冰柱会消融 k厘米,其高度变为max(0,a_i-k)。否则,该冰柱不发生任何变化。
请你计算出经过多少分钟后,所有冰柱恰好完全消融,即a_1=a_2=...=a_n=0。
出题者:吴俊豪同学
输入
输入第一行包括两个整数 n, k,分别表示冰柱的个数和大风的风力。
输入第二行包括n个整数,第 i个数表示第 i个冰柱的初始高度a_i。
数据范围:1<=n<=10^4,1<=k<=10^3,1<=a_i<=10^9
保证所有冰柱的高度a_i对模 k同余,即a_1=a_2=...=a_n(mod k),也即所有a_i除以 k得到的余数都相等。(例如 11/6 = 1......5,17/6 = 2......5则称11和17对模6同余。)
输出
输出一个整数,表示所有冰柱首次完全消融的时间。
输入样例 1
3 1
1 1 2
输出样例 1
4
输入样例 2
5 2
3 7 1 5 3
输出样例 2
6
提示
第一个样例中,冰柱的高度变化如下:
[1,1,2]->[1,1,1]->[1,1,0]->[1,0,0]->[0,0,0],故答案为4。
第二个样例中,冰柱的高度变化如下:
[3,7,1,5,3]->[3,5,1,3,1]->[3,3,1,1,0]->[3,1,1,0,0]->[1,1,0,0,0]->[1,0,0,0,0]->[0,0,0,0,0]->,故答案为6。
想想a_n何时降为0?
如果对a_i对模 k同余没有想法,也可以试试直接把a_i当作 k的倍数看待,来寻找思路。
AC代码
n, k = map(int, input().split())
a = list(map(int, input().split()))
s = [(x + k - 1) // k for x in a]
prev_t = s[-1]
for i in range(n-2, -1, -1):
prev_t = max(s[i], prev_t + 1)
print(prev_t)