题目 20382

冲突

查看题解 ↗GitHub ↗如何评测
题号
20382
时间限制
1000 ms
内存限制
256 MB
标签
比赛CSP-S
来源
CSP-S 国外模拟赛 25 - T4

第 4 题 冲突 (collision)

CSP-S 复赛模拟赛 25 · 时间限制 1.0 s · 空间限制 256 MB · 63 个测试点 · 全文比较(过滤行末空格及文末回车)

本题使用文件输入输出:输入文件 collision.in,输出文件 collision.out。

题目描述

比太郎住在围绕一个大圆形湖泊的周围。湖泊的周长是 LL,湖泊周围的某个地点是比太郎的家。从比太郎的家开始沿湖泊周围顺时针移动 xx(0≤x<L0 \le x < L)的地点被称为地点 xx。现在,计划在湖泊周围举行马拉松比赛。

比太郎听说马拉松比赛将按以下方式进行:

  • 准备了从 0 到 L−1L - 1 编号的号码布各一张。马拉松比赛的参与者将佩戴其中一个号码布。佩戴号码布 ll(0≤l≤L−10 \le l \le L - 1)的参与者的起点将是地点 ll。
  • 马拉松比赛开始后,TT 秒内,参与者将以各自的速度沿湖泊周围顺时针移动。马拉松比赛开始后经过 tt 秒(0≤t≤T0 \le t \le T)的时间被称为时刻 tt。

比太郎拥有马拉松比赛的参与者名单。目前,名单上记录了 NN 位参与者,第 ii 位参与者(1≤i≤N1 \le i \le N)佩戴号码布 AiA_i,并计划以每秒 SiS_i 的速度沿湖泊周围顺时针移动。

根据参与者名单,比太郎计算了马拉松比赛中发生的冲突次数。这里,冲突是指两个不同的参与者在同一地点的情况。严格来说,计算满足以下条件的整数三元组 (p,q,t)(p, q, t) 的个数,其中 0≤p<q≤L−10 \le p < q \le L - 1,0≤t≤T0 \le t \le T 是一个实数:

  • 有佩戴号码布 pp 的参与者。
  • 有佩戴号码布 qq 的参与者。
  • 在时刻 tt,佩戴号码布 pp 的参与者和佩戴号码布 qq 的参与者在同一地点。

然而,之后参与者名单进行了 QQ 次更改。第 jj 次(1≤j≤Q1 \le j \le Q)更改由两个整数 Xj,YjX_j, Y_j 表示,如下所示:

  • 如果当前参与者名单中有名佩戴号码布 XjX_j,以每秒 YjY_j 的速度沿湖泊周围顺时针移动的人,则将其从名单中删除。否则,将一名佩戴号码布 XjX_j,以每秒 YjY_j 的速度沿湖泊周围顺时针移动的人添加到参与者名单中。

请注意,在任何更改结束后,参与者名单中至少有 2 人,并且参与者佩戴的号码布都不同。

比太郎想知道每次更改结束后,当前参与者在马拉松比赛中发生的冲突次数。根据问题描述的约束,可以证明马拉松比赛中发生的冲突次数是有限的。

给定马拉松比赛和参与者名单更改的信息,请编写一个程序,计算每次更改结束后,当前参与者在马拉松比赛中发生的冲突次数除以 1 000 000 007 的余数。

输入格式

输入按照如下格式给出:

N L TA1 A2 … AN S1 S2 … SNQ X1 Y1X2 Y2 ;XQ YQN\ L\ T \qquad A_1\ A_2\ \ldots\ A_N\ S_1\ S_2\ \ldots\ S_N \qquad Q\ X_1\ Y_1 \quad X_2\ Y_2\ ; \quad X_Q\ Y_Q

输出格式

输出 QQ 行。第 jj 行(1≤j≤Q1 \le j \le Q)输出第 jj 次更改结束后,当前参与者在马拉松比赛中发生的冲突次数除以 1 000 000 007 的余数。

样例

样例 1

输入:

文本
3 7 2
1 6 3
4 1 6
1
4 2

输出:

文本
7

样例 2

输入:

文本
3 6 1
1 3 4
1 1 1
2
0 2
1 1

输出:

文本
1
0

样例 3

输入:

文本
2 100000 993754689
58683 3478
28489 48682814
1
28482 39599461

输出:

文本
9265409

样例 4

输入:

文本
7 100 100
34 12 46 23 57 63 99
12 34 23 12 34 12 23
5
67 34
99 23
33 34
99 12
23 12

输出:

文本
330
264
341
440
341

提示

样例 1 解释

第一次更改结束后,有 4 位参与者。每个参与者的信息如下:

  1. 佩戴号码布 1,从地点 1 出发。以每秒 4 的速度顺时针移动。
  2. 佩戴号码布 6,从地点 6 出发。以每秒 1 的速度顺时针移动。
  3. 佩戴号码布 3,从地点 3 出发。以每秒 6 的速度顺时针移动。
  4. 佩戴号码布 4,从地点 4 出发。以每秒 2 的速度顺时针移动。

第一次更改结束后,马拉松比赛中发生以下 7 次冲突:

  1. 在时刻 1/41/4,佩戴号码布 3 的参与者和佩戴号码布 4 的参与者在同一地点 9/29/2。
  2. 在时刻 3/53/5,佩戴号码布 3 的参与者和佩戴号码布 6 的参与者在同一地点 33/533/5。
  3. 在时刻 3/23/2,佩戴号码布 1 的参与者和佩戴号码布 4 的参与者在同一地点 0。
  4. 在时刻 5/35/3,佩戴号码布 1 的参与者和佩戴号码布 6 的参与者在同一地点 2/32/3。
  5. 在时刻 2,佩戴号码布 3 的参与者和佩戴号码布 4 的参与者在同一地点 1。
  6. 在时刻 2,佩戴号码布 3 的参与者和佩戴号码布 6 的参与者在同一地点 1。
  7. 在时刻 2,佩戴号码布 4 的参与者和佩戴号码布 6 的参与者在同一地点 1。

这个输入样例满足子任务 2, 3, 4, 5, 6 的约束。

样例 2 解释

第一次更改结束后,有 4 位参与者。每个参与者的信息如下:

  1. 佩戴号码布 1,从地点 1 出发。以每秒 1 的速度顺时针移动。
  2. 佩戴号码布 3,从地点 3 出发。以每秒 1 的速度顺时针移动。
  3. 佩戴号码布 4,从地点 4 出发。以每秒 1 的速度顺时针移动。
  4. 佩戴号码布 0,从地点 0 出发。以每秒 2 的速度顺时针移动。

第一次更改结束后,马拉松比赛中发生以下 1 次冲突:

  1. 在时刻 1,佩戴号码布 0 的参与者和佩戴号码布 1 的参与者在同一地点 2。

第二次更改结束后,有 3 位参与者。每个参与者的信息如下:

  1. 佩戴号码布 3,从地点 3 出发。以每秒 1 的速度顺时针移动。
  2. 佩戴号码布 4,从地点 4 出发。以每秒 1 的速度顺时针移动。
  3. 佩戴号码布 0,从地点 0 出发。以每秒 2 的速度顺时针移动。

第二次更改结束后,马拉松比赛中发生的冲突次数为 0。

这个输入样例满足子任务 1, 3, 5, 6 的约束。

样例 3 解释

第一次更改结束后,有 3 位参与者。每个参与者的信息如下:

  1. 佩戴号码布 58683,从地点 58683 出发。以每秒 28489 的速度顺时针移动。
  2. 佩戴号码布 3478,从地点 3478 出发。以每秒 48682814 的速度顺时针移动。
  3. 佩戴号码布 28482,从地点 28482 出发。以每秒 39599461 的速度顺时针移动。

第一次更改结束后,马拉松比赛中发生的冲突次数为 967009272178 次。因此,马拉松比赛中发生的冲突次数除以 1 000 000 007 的余数为 9265409。

这个输入样例满足子任务 2, 3, 4, 5, 6 的约束。

数据范围

  • 2≤N2 \le N
  • N≤L≤109N \le L \le 10^9
  • 1≤T≤1091 \le T \le 10^9
  • 0≤Ai≤L−10 \le A_i \le L - 1(1≤i≤N1 \le i \le N)
  • Ai≠AjA_i \neq A_j(1≤i<j≤N1 \le i < j \le N)
  • 1≤Si≤1091 \le S_i \le 10^9(1≤i≤N1 \le i \le N)
  • 1≤Q1 \le Q
  • N+Q≤100 000N + Q \le 100\,000
  • 0≤Xj≤L−10 \le X_j \le L - 1(1≤j≤Q1 \le j \le Q)
  • 1≤Yj≤1091 \le Y_j \le 10^9(1≤j≤Q1 \le j \le Q)
  • 任何更改结束后,参与者人数都大于等于 2。
  • 任何更改结束后,参与者的起点都不同。
  • 输入的所有值都是整数。

子任务

  1. (10 分) T=1T = 1,Si≤2S_i \le 2(1≤i≤N1 \le i \le N),Yj≤2Y_j \le 2(1≤j≤Q1 \le j \le Q)。
  2. (8 分) N≤2000N \le 2000,Q=1Q = 1。
  3. (11 分) N≤2000N \le 2000,Q≤2000Q \le 2000。
  4. (27 分) Q=1Q = 1。
  5. (34 分) N+Q≤78 000N + Q \le 78\,000。
  6. (10 分) 没有额外的限制。

数据下载

题目 20382 的公开数据

正在读取文件列表…

常用命令

题目 20382 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。