第 4 题 冲突 (collision)
CSP-S 复赛模拟赛 25 · 时间限制 1.0 s · 空间限制 256 MB · 63 个测试点 · 全文比较(过滤行末空格及文末回车)
本题使用文件输入输出:输入文件 collision.in,输出文件 collision.out。
题目描述
比太郎住在围绕一个大圆形湖泊的周围。湖泊的周长是
比太郎听说马拉松比赛将按以下方式进行:
- 准备了从 0 到
编号的号码布各一张。马拉松比赛的参与者将佩戴其中一个号码布。佩戴号码布 ( )的参与者的起点将是地点 。 - 马拉松比赛开始后,
秒内,参与者将以各自的速度沿湖泊周围顺时针移动。马拉松比赛开始后经过 秒( )的时间被称为时刻 。
比太郎拥有马拉松比赛的参与者名单。目前,名单上记录了
根据参与者名单,比太郎计算了马拉松比赛中发生的冲突次数。这里,冲突是指两个不同的参与者在同一地点的情况。严格来说,计算满足以下条件的整数三元组
- 有佩戴号码布
的参与者。 - 有佩戴号码布
的参与者。 - 在时刻
,佩戴号码布 的参与者和佩戴号码布 的参与者在同一地点。
然而,之后参与者名单进行了
- 如果当前参与者名单中有名佩戴号码布
,以每秒 的速度沿湖泊周围顺时针移动的人,则将其从名单中删除。否则,将一名佩戴号码布 ,以每秒 的速度沿湖泊周围顺时针移动的人添加到参与者名单中。
请注意,在任何更改结束后,参与者名单中至少有 2 人,并且参与者佩戴的号码布都不同。
比太郎想知道每次更改结束后,当前参与者在马拉松比赛中发生的冲突次数。根据问题描述的约束,可以证明马拉松比赛中发生的冲突次数是有限的。
给定马拉松比赛和参与者名单更改的信息,请编写一个程序,计算每次更改结束后,当前参与者在马拉松比赛中发生的冲突次数除以 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 出发。以每秒 4 的速度顺时针移动。
- 佩戴号码布 6,从地点 6 出发。以每秒 1 的速度顺时针移动。
- 佩戴号码布 3,从地点 3 出发。以每秒 6 的速度顺时针移动。
- 佩戴号码布 4,从地点 4 出发。以每秒 2 的速度顺时针移动。
第一次更改结束后,马拉松比赛中发生以下 7 次冲突:
- 在时刻
,佩戴号码布 3 的参与者和佩戴号码布 4 的参与者在同一地点 。 - 在时刻
,佩戴号码布 3 的参与者和佩戴号码布 6 的参与者在同一地点 。 - 在时刻
,佩戴号码布 1 的参与者和佩戴号码布 4 的参与者在同一地点 0。 - 在时刻
,佩戴号码布 1 的参与者和佩戴号码布 6 的参与者在同一地点 。 - 在时刻 2,佩戴号码布 3 的参与者和佩戴号码布 4 的参与者在同一地点 1。
- 在时刻 2,佩戴号码布 3 的参与者和佩戴号码布 6 的参与者在同一地点 1。
- 在时刻 2,佩戴号码布 4 的参与者和佩戴号码布 6 的参与者在同一地点 1。
这个输入样例满足子任务 2, 3, 4, 5, 6 的约束。
样例 2 解释
第一次更改结束后,有 4 位参与者。每个参与者的信息如下:
- 佩戴号码布 1,从地点 1 出发。以每秒 1 的速度顺时针移动。
- 佩戴号码布 3,从地点 3 出发。以每秒 1 的速度顺时针移动。
- 佩戴号码布 4,从地点 4 出发。以每秒 1 的速度顺时针移动。
- 佩戴号码布 0,从地点 0 出发。以每秒 2 的速度顺时针移动。
第一次更改结束后,马拉松比赛中发生以下 1 次冲突:
- 在时刻 1,佩戴号码布 0 的参与者和佩戴号码布 1 的参与者在同一地点 2。
第二次更改结束后,有 3 位参与者。每个参与者的信息如下:
- 佩戴号码布 3,从地点 3 出发。以每秒 1 的速度顺时针移动。
- 佩戴号码布 4,从地点 4 出发。以每秒 1 的速度顺时针移动。
- 佩戴号码布 0,从地点 0 出发。以每秒 2 的速度顺时针移动。
第二次更改结束后,马拉松比赛中发生的冲突次数为 0。
这个输入样例满足子任务 1, 3, 5, 6 的约束。
样例 3 解释
第一次更改结束后,有 3 位参与者。每个参与者的信息如下:
- 佩戴号码布 58683,从地点 58683 出发。以每秒 28489 的速度顺时针移动。
- 佩戴号码布 3478,从地点 3478 出发。以每秒 48682814 的速度顺时针移动。
- 佩戴号码布 28482,从地点 28482 出发。以每秒 39599461 的速度顺时针移动。
第一次更改结束后,马拉松比赛中发生的冲突次数为 967009272178 次。因此,马拉松比赛中发生的冲突次数除以 1 000 000 007 的余数为 9265409。
这个输入样例满足子任务 2, 3, 4, 5, 6 的约束。
数据范围
( ) ( ) ( ) ( ) ( ) - 任何更改结束后,参与者人数都大于等于 2。
- 任何更改结束后,参与者的起点都不同。
- 输入的所有值都是整数。
子任务
- (10 分)
, ( ), ( )。 - (8 分)
, 。 - (11 分)
, 。 - (27 分)
。 - (34 分)
。 - (10 分) 没有额外的限制。