2020.07.29 晚上 笔试 2h
1)种草
杰夫非常喜欢种草,他自己有一片草地,为了方便起见,我们把这片草地看成一行从左到右,并且第 i 个位置的草的高度是hi。
杰夫在商店中购买了m瓶魔法药剂,每瓶魔法药剂可以让一株草长高x,杰夫希望每次都能有针对性的使用药剂,也就是让当前长得最矮的小草尽量高,现在杰夫想请你告诉他在使用了m瓶魔法药剂之后,最矮的小草在这种情况下最高能到多少。
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int x = sc.nextInt();
PriorityQueue<Integer> queue = new PriorityQueue<>();
for (int i = 0; i < n; i++) {
queue.add(sc.nextInt());
}
for (int i = 0; i < m; i++) {
queue.add(queue.poll() + x);
}
System.out.println(queue.peek());
}
}
2)各不相同
我们希望一个序列中的元素是各不相同的,但是理想和现实往往是有差距的。现在给出一个序列A,其中难免有些相同的元素,现在提供了一种变化方式,使得经过若干次操作后一定可以得到一个元素各不相同的序列。
这个操作是这样的,令x为序列中最小的有重复的数字,你需要删除序列左数第一个x,并把第二个x替换为2*x。
请你输出最终的序列。
例如原序列是[2,2,1,1,1],一次变换后变为[2,2,2,1],两次变换后变为[4,2,1],变换结束。
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
PriorityQueue<Long> queue = new PriorityQueue<>();
for (long i = 0; i < n; i++) {
queue.add(sc.nextLong());
}
Stack<Long> stack = new Stack<>();
while (!queue.isEmpty()){
long tmp = queue.poll();
if(queue.isEmpty()) {
stack.push(tmp);
continue;
}
if(tmp != queue.peek()) {
stack.push(tmp);
} else {
queue.add(queue.poll() * 2);
}
}
while (!stack.isEmpty()){
System.out.print(stack.pop() + " ");
}
}
}
第一题100%,第二题18%,第三题没做。

全部评论
(3) 回帖