#P13294. [GCJ 2013 #2] Ticket Swapping

[GCJ 2013 #2] Ticket Swapping

Description

这座城市新建成了第一条地铁线,共有 NN 个车站,并引入了一种新的计费方式。乘客不再只需购买一张票随意乘车,而是基于进站卡来计费。

当乘客进入地铁时,会领取一张进站卡,卡上标明了乘客进站的车站编号。当乘客出站时,需交回进站卡,并根据进站卡上标明的进站站点与实际出站站点之间的距离(即经过的车站数)计费,具体计费方式如下:

  • 若进出站为同一车站,不收费;
  • 若进出站为相邻车站,收费 NN 英镑;
  • 若间隔 22 个车站,则收费 2N12N - 1:第一站 NN,第二站 N1N-1
  • 第三站收费 N2N-2(即三站共收费 3N33N-3),第四站 N3N-3,第 ii 站收费 N+1iN+1-i
  • 因此,如果从地铁一端坐到另一端(共 N1N-1 站),最后一站收费 22 英镑,总计收费 (N2+N2)/2(N^2 + N - 2)/2 英镑。

引入该系统后,城市发现收入没有预期的高。他们意识到,这可能是因为有人在途中交换了进站卡。例如,某人从车站 AA 上车,坐两站到 BB 下车,另一人从 BB 上车,坐三站到 CC 下车,正常情况下总共需支付 2N1+3N3=5N42N-1 + 3N-3 = 5N-4。但如果两人在 BB 交换进站卡,则第一个人出站时交回写有 BB 的进站卡,相当于免费出站;第二个人在 CC 下车时交回写有 AA 的进站卡,相距 55 站,收费为 5N105N-10,城市因此损失 66 英镑。

现在城市想知道,如果这种行为普遍发生,他们最多可能损失多少钱。我们只考虑同一方向(从车站 11 到车站 NN,依次经过所有车站)的一趟列车。假设一名乘客从 oo 站到 ee 站,会在 oo 站领取进站卡,可以在 ooee 之间的任意位置与其他乘客交换进站卡(包括与在 oo 下车或在 ee 上车的人交换),然后在 ee 站下车时交回一张进站卡(必须交卡才能出站)。假设乘客在此期间不会中途下车(即不会交卡再重新领卡)。

给定所有乘客的出发和终点信息(每一对出发、终点及人数),请你计算在所有人都最大化交换进站卡以使城市损失最大时,城市可能遭受的总损失。

Input Format

输入的第一行为测试用例数 TT。接下来是 TT 组测试数据。每组测试数据第一行为车站数 NN 和出发-终点对数 MM。接下来 MM 行,每行三个数:出发站 oio_i,终点站 eie_i,以及该线路上人数 pip_i

Output Format

对于每个测试用例,输出一行 "Case #$x$: $y",其中 xx 为测试用例编号(从 11 开始),yy 为由于换卡导致城市可能遭受的最大损失,对 10000020131000002013 取模。

3
6 2
1 3 1
3 6 1
6 2
1 3 2
4 6 1
10 2
1 7 2
6 9 1
Case #1: 6
Case #2: 0
Case #3: 10

Hint

样例说明

第一个测试用例即题面描述中的例子——两名乘客在车站 33 会面并交换了进站卡。第二个测试用例中,两组乘客没有会面机会,因此无法交换进站卡(城市没有损失)。第三个测试用例中,只有一部分早下车的乘客可以和后上车的乘客交换进站卡。

限制条件

  • 1T201 \leq T \leq 20
  • 1oi<eiN1 \leq o_i < e_i \leq N

小数据集(8 分,测试集 1 - 可见)

  • 2N1002 \leq N \leq 100
  • 1M1001 \leq M \leq 100
  • 1pi1001 \leq p_i \leq 100

大数据集(11 分,测试集 2 - 隐藏)

  • 2N1092 \leq N \leq 10^9
  • 1M10001 \leq M \leq 1000
  • 1pi1091 \leq p_i \leq 10^9

翻译由 ChatGPT-4.1 完成。