CF1945G.Cook and Porridge

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

终于到午饭时间了!

有 nn 名学生在食堂的厨师帐篷前排成一条长队等待喝粥。厨师将在 DD 分钟内为大家分发粥。队列中第 ii 位学生有优先级 kik_i,且吃完一份粥需要 sis_i 分钟。

在每一分钟的开始,厨师会为队首的学生分发一份粥,然后该学生去吃粥。如果第 ii 位学生在第 xx 分钟开始时拿到粥,那么他会在第 (x+si)(x + s_i) 分钟结束时返回队列。

当第 ii 位学生返回队列时,队尾所有优先级严格低于 kik_i 的学生都必须让他插队。因此,他会站在队列中最后一个优先级不低于他自己的学生后面。也就是说,排在最后一个 kj≥kik_j \ge k_i 的学生后面。如果队列中没有这样的学生,则他会站到队首。

如果有多名学生同时返回队列,则按 sis_i 从小到大依次返回。

例如,若 n=3n = 3,D=3D = 3,k=[2,3,2]k = [2, 3, 2],s=[2,1,3]s = [2, 1, 3],分发过程如下:

  • 第 11 分钟开始时,队列为 [1,2,3][1, 2, 3],学生 11 得到粥;
  • 第 22 分钟开始时,队列为 [2,3][2, 3],学生 22 得到粥;
  • 第 33 分钟开始时,队列为 [3][3],学生 33 得到粥;
  • 第 33 分钟结束时,学生 22 返回队列,队列变为 [2][2];
  • 第 33 分钟结束时,学生 11 返回队列,队列变为 [2,1][2, 1],因为他的优先级较低。

请你计算,每位学生至少能喝到一次粥所需的最少分钟数;如果在 DD 分钟内无法做到,请输出 −1-1。

输入格式

每组测试数据包含若干测试用例。第一行包含一个整数 tt(1≤t≤10001 \le t \le 1000),表示测试用例数量。

每个测试用例的第一行包含两个整数 nn 和 DD(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5,1≤D≤3⋅1051 \le D \le 3\cdot 10^5),分别表示队列中的学生数和午休时间。

接下来的 nn 行,每行包含两个整数 kik_i 和 sis_i(1≤ki,si≤1091 \le k_i, s_i \le 10^9),分别表示第 ii 位学生的优先级和吃完一份粥所需的时间。学生按队列顺序给出(从队首到队尾)。

保证所有输入数据中 nn 的总和不超过 2⋅1052\cdot 10^5,DD 的总和不超过 3⋅1053\cdot 10^5。

输出格式

对于每个测试用例,输出一个整数,表示每位学生至少能喝到一次粥所需的最少分钟数。如果在午休时间内无法做到,输出 −1-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测评打分。不知道怎么写?

首页