luogu#P9933. [NFLSPC #6] 9.pop_book();

[NFLSPC #6] 9.pop_book();

题目背景

Alek 岁在操场上跑圈。他看到有人超过他,很不爽。于是他采取了以下策略:

题目描述

在长度为 mm 的环形操场上有 nn 个人,第 ii 个人在 tit_i 时刻从位置 pip_i 出发以 viv_i 单位长度每秒的速度移动。现在 00 时刻 Alek 岁在位置 00 处,速度为 00,会跟着经过他的速度最快的人移动。qq 次询问 TiT_i 时刻 Alek 岁的移动距离。可以证明这是一个整数。

注:从位置 00 出发逆时针方向 xx0x<m0\leq x < m)单位长度的位置称为位置 xx。所有人的运动方向都是逆时针。

多组数据。

输入格式

第一行一个整数 TT 表示数据组数。对于每组数据:

  • 第一行三个整数 n,m,qn, m, q,分别表示人数,操场长度和询问个数。
  • 接下来 nn 行,每行三个整数 pi,vi,tip_i, v_i, t_i,分别表示第 ii 个人出发时的位置,移动速度(单位长度每秒)和出发时间。
  • 接下来 qq 行,每行一个整数 TiT_i 表示一次询问。

输出格式

对于每个询问,输出一行一个整数表示答案。

1
3 30 8
0 2 1
6 5 2
25 4 4
1
5
9
10
11
12
13
14

0
8
16
19
23
27
31
36

提示

对于所有数据,1T1031\leq T\leq 10 ^ 31n,n5×1051\leq n, \sum n\leq 5\times 10 ^ 51m,q,q1061\leq m, q, \sum q \leq 10 ^ 61vi,ti,Ti1091\leq v_i, t_i, T_i\leq 10 ^ 90pi<m0\leq p_i < m。保证 tit_i 单调不降,TiT_i 单调递增。

  • 子任务 1(1010 分):n5n\leq 5
  • 子任务 2(1010 分):n50n\leq 50
  • 子任务 3(2020 分):n500n\leq 500
  • 子任务 4(2020 分):n5×103n\leq 5\times 10 ^ 3
  • 子任务 5(2020 分):n5×104n\leq 5\times 10 ^ 4
  • 子任务 6(2020 分):无特殊限制。

请注意,子任务并没有保证 q\sum q 的数量级

本题 IO 量较大,建议使用 scanf/printf 或关闭流同步的 cin/cout 或快速读入和快速输出。

Source:NFLSPC #6 I by Alex_Wei