农夫约翰的奶牛们非常爱吃甜食,尤其爱吃拐杖糖。
约翰一共有 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;
}
}
}