贝茜放慢脚步


题目

链接:1934. 贝茜放慢脚步 - AcWing题库

奶牛贝茜正在参加冬季哞林匹克运动会的越野滑雪比赛。

她以每秒 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
*/

文章作者: 姜小白
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜小白 !
评论
  目录