2023 usaco 12月份 第一题题解

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)

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值