CF1945G.Cook and Porridge
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
终于到午饭时间了!
有 n 名学生在食堂的厨师帐篷前排成一条长队等待喝粥。厨师将在 D 分钟内为大家分发粥。队列中第 i 位学生有优先级 ki,且吃完一份粥需要 si 分钟。
在每一分钟的开始,厨师会为队首的学生分发一份粥,然后该学生去吃粥。如果第 i 位学生在第 x 分钟开始时拿到粥,那么他会在第 (x+si) 分钟结束时返回队列。
当第 i 位学生返回队列时,队尾所有优先级严格低于 ki 的学生都必须让他插队。因此,他会站在队列中最后一个优先级不低于他自己的学生后面。也就是说,排在最后一个 kj≥ki 的学生后面。如果队列中没有这样的学生,则他会站到队首。
如果有多名学生同时返回队列,则按 si 从小到大依次返回。
例如,若 n=3,D=3,k=[2,3,2],s=[2,1,3],分发过程如下:
- 第 1 分钟开始时,队列为 [1,2,3],学生 1 得到粥;
- 第 2 分钟开始时,队列为 [2,3],学生 2 得到粥;
- 第 3 分钟开始时,队列为 [3],学生 3 得到粥;
- 第 3 分钟结束时,学生 2 返回队列,队列变为 [2];
- 第 3 分钟结束时,学生 1 返回队列,队列变为 [2,1],因为他的优先级较低。
请你计算,每位学生至少能喝到一次粥所需的最少分钟数;如果在 D 分钟内无法做到,请输出 −1。
输入格式
每组测试数据包含若干测试用例。第一行包含一个整数 t(1≤t≤1000),表示测试用例数量。
每个测试用例的第一行包含两个整数 n 和 D(1≤n≤2⋅105,1≤D≤3⋅105),分别表示队列中的学生数和午休时间。
接下来的 n 行,每行包含两个整数 ki 和 si(1≤ki,si≤109),分别表示第 i 位学生的优先级和吃完一份粥所需的时间。学生按队列顺序给出(从队首到队尾)。
保证所有输入数据中 n 的总和不超过 2⋅105,D 的总和不超过 3⋅105。
输出格式
对于每个测试用例,输出一个整数,表示每位学生至少能喝到一次粥所需的最少分钟数。如果在午休时间内无法做到,输出 −1。
输入输出样例
输入#1
7 3 3 2 2 3 1 2 3 5 10 10 3 7 1 11 3 5 1 6 1 5 20 4 2 7 2 8 5 1 5 3 1 5 17 1 3 8 2 8 3 2 2 1 1 5 14 8 2 4 2 1 3 8 3 6 4 1 11 4 5 5 14 8 2 4 2 1 3 8 3 6 4
输出#1
3 -1 12 6 6 1 6
说明/提示
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?