مدونة SamHH0912

المدونات

#11578. Do It Tomorrow 题解

2025-07-11 06:17:36 By SamHH0912

题目传送门

题意简述

你有 $n$ 项工作要做,第 $i$ 项工作需要连续的 $d_i$ 天去完成(同一天只能完成一项工作),而且最后一天不得晚于 $t_i$。问在开始所有工作之前,你最多能休息多久?

数据范围:$1\le n\le 10^6$,$1\le d_i,t_i\le 10^9$。保证所有任务都能够按时完成。

解析

简单的贪心。

秉承“能拖就拖”的原则,我们先按截止时间降序排列这些任务,然后从前往后扫,同时维护一个值 $Ans$(根据数据范围,该值初始值应不小于 $10^9$)。

对于每个 $i$,执行下面这个式子:

$$Ans\leftarrow\min(Ans,t_i)-d_i$$

为什么?

首先第 $i$ 项工作需要在第 $t_i$ 天及之前完成,所以开始时间肯定不晚于 $t_i-d_i+1$。

如果即便拖延到极致但有工作已经占了第 $t_i$ 天,那么只能再往前推,推到最后一个没有工作的日子为止(第 $Ans$ 天)。

最后直接输出 $Ans$ 就可以了。

快排时间复杂度 $\mathcal{O}(n\log n)$,扫任务时间复杂度 $\mathcal{O}(n)$,可以通过本题。

代码实现过程已在上文中完整给出,因此不展示。

感谢您的阅读!

التعليقات

No comments yet.

نشر تعليق

يمكنك الإشارة إلى mike باستخدام "@mike"، وسيتم تمييز الاسم "mike". إذا أردت كتابة الرمز "@"، استخدم "@@" بدلاً من ذلك.

يمكنك إدخال "/kel" لاستخدام الرمز التعبيري "kel".