蓝桥杯集训·每日一题2025 拐杖糖盛宴

农夫约翰的奶牛们非常爱吃甜食,尤其爱吃拐杖糖。

约翰一共有 NN 头奶牛,编号 1∼N1∼N,其中第 ii 头奶牛的初始高度为 aiai。

约翰给奶牛们准备了 MM 根拐杖糖,编号 1∼M1∼M,其中第 ii 根的高度为 bibi。

约翰会按照糖果的编号顺序,每次拿出一根糖果喂给奶牛们,直到所有糖果都被喂完为止。

每当拿出一根糖果后,约翰会将其上端固定悬挂,下端自由下垂至刚好接触地面。

然后,奶牛们按照编号顺序,依次走到糖果面前,将糖果自下而上的啃食至自己的高度(因为更高的地方吃不到了)。

由于糖果上端是固定的,所以即使奶牛吃掉糖果的下端部分,糖果也会悬挂在最初设置的位置,不会下降至地面。

当轮到一个奶牛时,如果糖果剩余部分的底部高度已经超过了该奶牛的高度,那么它将什么都吃不到。

在所有奶牛都轮过一次后,不论这根糖果是否被吃完,该糖果都会被约翰扔掉,并换上下一根糖果,继续下一轮次的吃糖(仍然从编号为 11 的奶牛开始)。

另外,每轮过后,糖果都有可能令奶牛们的身高有所增长,具体为一头奶牛在本轮次吃掉了多少长度的糖果,其身高就会增高多少长度。

请你计算,当所有糖果都喂食完毕后,每头奶牛的最终高度。

直接暴力后稍加优化即可 

我们遍历所有糖果后 可能糖果被吃完了还一直在遍历每头牛 所以我们可以设置一个判断 使其提前结束 减少时间复杂度

import java.util.Scanner;

public class day7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        long[] cow = new long[n];
         long hight = 0L;
        for (int i = 0;i < n;i++){
            cow[i] = scanner.nextInt();
        if (hight < cow[i]){hight = cow[i];}}
        for (int i = 0; i < m; i++) {
            candy temp = new candy(0, scanner.nextInt());
            for (int j = 0; j < n; j++) {
                if (temp.down < cow[j] && temp.down != temp.up){
                    long down = temp.down;
                    temp.down = temp.up >= cow[j]?cow[j]:temp.up;
                    cow[j] += cow[j]>temp.up? temp.up - down:cow[j] - down;
                    if (temp.down == temp.up || temp.down >= hight){break;}
                }
            }
        }
        for (long i : cow) {
            System.out.println(i);
        }

    }
    static class candy{
        long up;
        long down;
        public candy(long down, long up) {
            this.down = down;
            this.up = up;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值