题目
奶牛贝茜正在参加冬季哞林匹克运动会的越野滑雪比赛。
她以每秒 1 米的速度出发。
但是,随着时间的推移,她变得越来越疲倦,她开始放慢脚步。
每次放慢脚步,贝茜的速度都会降低:减速一次后,她以每秒 1/2 米的速度移动,减速两次后,则以每秒 1/3 米的速度移动,依此类推。
你将被告知何时何地贝茜会减速。
当减速信息格式为:
T 17
意味着,贝茜在某个时间点减速,本例表示比赛开始第 17 秒贝茜减速。
当减速信息格式为:
D 10
意味着,贝茜在某个地点减速,本例表示在行进 10 米处减速。
给定 N 个减速信息,请计算贝茜滑完一千米需要多少秒。
将你的答案四舍五入到最接近的整数( 0.5 向上舍入为 1)。
代码
import java.util.*;
public class Main {
static int n;
static PriorityQueue<Integer> T = new PriorityQueue<>();
static PriorityQueue<Integer> D = new PriorityQueue<>();
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
n = inScanner.nextInt();
while(n -- > 0)
{
if("T".equals(inScanner.next()))
T.offer(inScanner.nextInt());
else
D.offer(inScanner.nextInt());
}
double v = 1, time = 0, dis = 0;
while(!T.isEmpty() || !D.isEmpty())
{
if(T.isEmpty() || (!D.isEmpty() && time + (D.peek() - dis) * v < T.peek()))
{
time += (D.peek() - dis) * v;
dis = D.poll();
}
else
{
dis += (T.peek() - time) / v;
time = T.poll();
}
v ++;
}
int ans = (int)(time + (1000 - dis) * v + 0.5);
System.out.println(ans);
inScanner.close();
}
}
/*
2
T 30
D 10
*/