#CSPS2026C. 迁徙 / migrate

迁徙 / migrate

题目描述

海上有 nn 座岛屿,自北向南排成一条直线,其中第 i (1≤i≤n)i\ (1 \le i \le n) 座岛屿在这条直线上的坐标为整数 xix_i,且 x1<x2<⋯<xnx_1 < x_2 < \cdots < x_n。每年秋季,一群海鸟会沿着这条直线在南北方向上迁徙,小 P 正在观察它们。

海鸟的体力有限,每次飞行的距离都不超过 dd。若两座岛屿 i,ji, j 满足 ∣xi−xj∣≤d|x_i - x_j| \le d,海鸟就可以从第 ii 座岛屿直接飞到第 jj 座岛屿。

对于两座不同的岛屿 u,vu, v,一条从第 uu 座岛屿到第 vv 座岛屿的路径形如 y1→y2→⋯→ymy_1 \to y_2 \to \cdots \to y_m,其中 y1=uy_1 = u,ym=vy_m = v,且对于所有 l (1≤l≤m−1)l\ (1 \le l \le m - 1),海鸟都能够从第 yly_l 座岛屿直接飞到第 yl+1y_{l+1} 座岛屿;其长度为 m−1m - 1,即海鸟在路径中飞行的次数。

小 P 发现,海鸟在迁徙时总是会选择长度最短的路径。对于两座岛屿 u,v (1≤u<v≤n)u, v\ (1 \le u < v \le n),若从第 uu 座岛屿到第 vv 座岛屿的长度最短的路径恰好有两条,海鸟可以分成两群,分别沿其中一条飞往第 vv 座岛屿;此时称 (u,v)(u, v) 为双径岛屿对。两条路径不同,当且仅当它们经过的岛屿序列不完全相同。

你需要帮助小 P 求出双径岛屿对的数量。

输入格式

本题包含多组测试数据。

输入的第一行包含两个非负整数 c,tc, t,分别表示测试点编号与测试数据组数。特别地,若 c=0c = 0,则该测试点为样例。

接下来依次输入 tt 组测试数据。对于每组测试数据:

  • 第一行包含两个正整数 n,dn, d,分别表示岛屿数量和海鸟一次最多能飞行的距离。
  • 第二行包含 nn 个严格递增的整数 x1,x2,…,xnx_1, x_2, \ldots, x_n,依次表示每座岛屿的坐标。

输出格式

对于每组测试数据,输出一行一个非负整数,表示双径岛屿对的数量。

样例 1

0 2
4 2
1 2 3 4
5 2
1 2 3 4 5
1
2

样例 2

0 2
5 3
-2 -1 0 1 2
6 2
-4 -3 -2 -1 3 6
0
1

说明

样例 1 解释:第一组仅有 1 个双径岛屿对 (1,4)(1, 4),两条最短路径为 1→2→41 \to 2 \to 4 和 1→3→41 \to 3 \to 4。第二组有 2 个双径岛屿对 (1,4)(1, 4) 和 (2,5)(2, 5);从 1 到 5 只有一条最短路径 1→3→51 \to 3 \to 5,所以 (1,5)(1, 5) 不是。

样例 2 解释:第一组中从 1 到 5 有三条最短路径 1→2→51 \to 2 \to 5、1→3→51 \to 3 \to 5、1→4→51 \to 4 \to 5,所以 (1,5)(1, 5) 不是双径岛屿对,答案为 0。第二组仅有 (1,4)(1, 4);第 5、6 座岛屿无法到达任何其他岛屿。

数据范围

设 NN 为单个测试点内所有测试数据的 nn 的和。对于所有测试数据,均有:

  • 0≤c≤250 \le c \le 25,2≤t≤1052 \le t \le 10^5;
  • 1≤n≤2×1061 \le n \le 2 \times 10^6,N≤2×106N \le 2 \times 10^6,1≤d≤2×10181 \le d \le 2 \times 10^{18};
  • −1018≤x1<x2<⋯<xn≤1018-10^{18} \le x_1 < x_2 < \cdots < x_n \le 10^{18}。
测试点编号 N≤N \le 特殊性质
1,21, 2 99 无
3∼63 \sim 6 300300
7∼107 \sim 10 50005000
11,1211, 12 2×1062 \times 10^6 A
13,1413, 14 B
15∼1815 \sim 18 10610^6 C
19∼2119 \sim 21 2×1052 \times 10^5 无
22∼2522 \sim 25 2×1062 \times 10^6
  • 特殊性质 A:x1,x2,…,xnx_1, x_2, \ldots, x_n 构成等差数列。
  • 特殊性质 B:存在一座岛屿,使得海鸟可以从该岛屿直接飞到任意其他岛屿。
  • 特殊性质 C:xn−x1≤10dx_n - x_1 \le 10d。

本题需要文件读写:输入文件 migrate.in,输出文件 migrate.out。

来源:CSP-S 2026 第二轮 T3。本 OJ 的测试数据为按题面测试点表自造,不是官方数据。本 OJ 内存上限为 512 MiB(原题 1024 MiB)。