usaco第一题,中文版翻译在洛谷P9974(洛谷上的时间限制比usaco的要短,所以我的这份代码在usaco是满分,但是在洛谷是84)
此题算法:模拟
时间复杂度:m*nlog2(有些人误以为时间复杂是mn,其实第一头牛吃蔗糖的时候他的身高是不断成长的)
这道题感觉就是纯模拟的感觉,题解那我就理一些思路吧
首先我先遍历了糖果的高度,tot代表糖果目前在哪里(tot的初始值为零),又在遍历糖果的里面,遍历了牛的身高,特判:如果牛的身高小于等于tot,那么就停止牛的身高的这一圈的循环。后面我设置了一个变量sy(sy=牛的身高-tot),也就是牛有能力吃多少甘蔗糖。如果,糖果的高度小于等于sy,也就是牛的身高已经超过了糖果的高度,供不应求了,所以牛的身高加等于糖果高度。其他情况呢,牛的身高加等于sy,tot加等于sy,糖果的高度减等于sy。
然后,输出牛的身高,完成。
不懂得联系文字与代码一起看吧
"m*Nlog2"# 9974
n,m=[int(i) for i in input().split()]
h=[int(i) for i in input().split()]
cd=[int(i)for i in input().split()]
for x in cd:
tot=0# 糖果在哪里(高度)
for j in range(n):
if h[j]<=tot:
continue
sy = h[j] - tot# 牛有能力吃多少
if x<=sy:# 供不应求
h[j]+=x
break# 优化
else:
h[j]+=sy
tot+=sy
x-=sy
for i in h:
print(i)