度小满笔试 64 100第一题欢迎大家指出问题
顺便黑一下猿辅导,觉得我10分钟不到解出算法题不够快哦
1. 从天而降(是不是后台测试例子答案错了,我感觉我没错啊)
第一行输入n,
第二行n个正整数 表示敌人血量
当处于位置x时放技能,可以对 x, 2*x,2*x+1的敌人同时造成一点伤害,求至少多少次技能可以消灭敌人
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int[] a=new int[n+1];
for(int i=1;i<=n;i++)
a[i]=in.nextInt();
long sum=0;
for(int i=n;i>=1;i--){
int num;
if(i%2==1){
int x=(i-1)/2;
num=Math.max(a[i],a[i-1]);
a[x]-=num;
a[i]=0;a[i-1]=0;
if(a[x]<0)
a[x]=0;
i--;
}else{
int x=i/2;
a[x]-=a[i];
num=a[i];
a[i]=0;
if(a[x]<0)
a[x]=0;
}
sum+=num;
/* System.out.println();
for(int j=1;j<=n;j++)
System.out.print(a[j]+" ");*/
}
System.out.println(sum);
}
} 2. 忘了题目了,大概是给出桥限重limit,给出车子重量w,车子过桥时间,第i+1辆车不能早于第i辆车 上桥,求所有车的过桥时间 思路:用一个优先级队列维持当前桥上的车子,比较的是下车时间 ,当桥上重量<=limit 上桥,车子的下车时间为已花费时间+过桥时间, 当大于时,车子下车,更新已花费的时间为车子下车时间
总体来说,度小满不收人了吧,偏简单
#度小满##笔试题目#import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();int limit=in.nextInt();
Car[] cars=new Car[n];
for(int i=0;i<n;i++)
cars[i]=new Car(in.nextInt(), 0);
for(int i=0;i<n;i++)
cars[i].t=in.nextInt();
PriorityQueue<Car> list=new PriorityQueue<>((o1,o2)->o1.compare(o2));
int sum=0,cur=0;
for(int i=0;i<n;){
if(cur+cars[i].w<=limit){
cars[i].t+=sum;
list.offer(cars[i]);
cur+=cars[i].w;
i++;
}else{
Car car=list.poll();
sum=car.t;
cur-=car.w;
while (list.size()>0 &&list.peek().t==sum){
car=list.poll();
cur-=car.w;
}
}
}
while (list.size()>0){
sum=list.poll().t;
}
System.out.println(sum);
}
static class Car{
int w;
int t;
public Car(int w, int t) {
this.w = w;
this.t = t;
}
public int compare(Car o){
return this.t-o.t;
}
}
} 总体来说,度小满不收人了吧,偏简单
查看29道真题和解析
