关注
比较任意两个加速块,哪个在前走的距离更远,根据这个比较维护一个最大堆,最大堆的的元素就是加速块。 在计算的时候最终位移的时候,弹出一个加速块,计算唯一,维持经过这个加速块后的速度,并把经过这个加速块的位移加到最终的位移上去。 以下是AC代码: import java.util.*;
public class Main {
private static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
int N = input.nextInt();
PriorityQueue<int[]> queue = new PriorityQueue<>(N, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
//o1 在 o2 前
double l1 = 0.5 * o1[0] * o1[1] * o1[1];
double v1 = o1[0] * o1[1];
double l2 = v1 * o2[1] + 0.5 * o2[0] * o2[1] * o2[1];
// o2 在 o1 前
double L1 = 0.5 * o2[0] * o2[1] * o2[1];
double V1 = o2[0] * o2[1];
double L2 = v1 * o1[1] + 0.5 * o1[0] * o1[1] * o1[1];
return (int)(l1 + l2 - L1 - L2);//维护一个最大堆
}}
);
int[] cell = null;
for(int i = 0; i < N; i++) {
cell = new int[2];
cell[0] = input.nextInt();
cell[1] = input.nextInt();
queue.offer(cell);
}
double distance = 0;
double x = 0;
double v = 0;
while(!queue.isEmpty()) {
int[] block = queue.poll();
x = v * block[1] + 0.5 * block[0] * block[1] * block[1];// x = v0 * t + 0.5 * a * t * t
v = v + block[0] * block[1]; //v = v + a * t 保持经过一个加速块后的速度
distance += x;
}
System.out.printf("%.1f", distance);
}
}
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
12353次浏览 165人参与
# 你的mentor是什么样的人? #
51151次浏览 721人参与
# 程序员找工作至少要刷多少题? #
21218次浏览 272人参与
# 我和mentor的爱恨情仇 #
106276次浏览 948人参与
# 论秋招对个人心气的改变 #
13441次浏览 188人参与
# 机械人避雷的岗位/公司 #
44139次浏览 309人参与
# 为了减少AI幻觉,你注入过哪些设定? #
6036次浏览 182人参与
# 秋招落幕,你是He or Be #
54235次浏览 618人参与
# 校招第一份工作你干了多久? #
136662次浏览 597人参与
# 高薪高压 vs 低薪wlb,你怎么选? #
47407次浏览 290人参与
# 设计人如何选offer #
189716次浏览 868人参与
# 考公VS就业,你怎么选? #
91988次浏览 507人参与
# 职场上哪些行为很加分? #
322568次浏览 3601人参与
# 你的秋招进行到哪一步了 #
2530909次浏览 23253人参与
# 牛客AI体验站 #
7750次浏览 210人参与
# 机械人还在等华为开奖吗? #
312130次浏览 1582人参与
# 秋招投递记录 #
380926次浏览 3204人参与
# 12306一秒售罄,你抢到回家的票了吗? #
2316次浏览 52人参与
# 我现在比当时_,你想录用我吗 #
9448次浏览 129人参与
# 重来一次,我还会选择这个专业吗 #
411276次浏览 3898人参与