P13817 「LDOI R3」球球碰撞

题目背景

我以爲走下去是一種默契。 你卻說你需要離開,需要一些空間呼吸。

题目描述

一条一维的无限长轨道上,给定 $n$ 颗弹珠,第 $i$ 颗弹珠有一个**初速度** $v_{i}$。 你需要设置每一颗弹珠的**位置**和**初始方向**,使得: - 初始时任意两颗弹珠不在同一位置。 - **启动装置**后,**不允许**某一时刻,存在 $x(x\ge3)$ 颗弹珠同时在同一位置碰撞。 你需要最大化启动装置后发生的碰撞总数,你只需要求出该值即可,不需要给出具体每个弹珠的位置和初始方向。 **启动装置**后,若任意两颗弹珠运动到同一位置,即称发生了一次无能量损失的碰撞,这两个弹珠会**交换运动方向和速度**。 例如,速度为每秒 $2$ 米的弹珠 A 和每秒 $3$ 米的弹珠 B **迎面相撞**,那么这两个弹珠相互弹开改变方向,并且弹珠 A 速度变为每秒 $3$ 米,弹珠 B 速度变为每秒 $2$ 米。

输入格式

**本题有多组测试数据。** 第一行,一行一个整数 $T$ 代表数据组数。 接下来包含 $T$ 组数据,每组数据的格式如下: 第一行包含一个正整数 $n$,表示弹珠数量。 第二行包含 $n$ 个正整数 $v_1, v_2, \dots, v_n$,表示每一颗弹珠的速度。

输出格式

对于每组数据:输出一行包含一个非负整数,表示最大的碰撞数。

说明/提示

#### 【样例解释】 对于第一组数据,两颗弹珠迎面相撞后相离,不会进行第二次碰撞。碰撞数为 $1$。 对于第二组数据,如下图设置,碰撞数最大为 $3$。可以证明不存在更大的碰撞数。 ![](https://cdn.luogu.com.cn/upload/image_hosting/gs2mzoge.png) #### 【数据范围和约定】 **本题使用了子任务依赖。** 对于所有测试数据,保证: - $1\leq T\leq 5$, - $2\leq n\leq 10^5$, - $1\leq v_i\leq 10^9$。 ::cute-table{tuack} | $\text{Subtask}$ | $n$ | $v_i$ | 特殊性质 | 分值 | 子任务依赖 | | :-: | :-: | :-: | :-: | :-: | :-: | | $0$ | $\leq 5$ | $\leq 10$ | 样例 | $0$ | $/$ | | $1$ | $\leq 20$ | $\leq 10^9$ | 无 | $10$ | $0$ | | $2$ | $\leq 2000$ | $\leq 10^9$ | 有 | $10$ | $0$ | | $3$ | $\leq 2000$ | $\leq 10^9$ | 无 | $15$ | $0,1$ | | $4$ | $\leq 10^5$ | $\leq 10^9$ | 有 | $15$ | $0,2$ | | $5$ | $\leq 10^5$ | $\leq 10$ | 无 | $20$ | $0$ | | $6$ | $\leq 10^5$ | $\leq 10^9$ | 无 | $30$ | $0\sim 5$ | 特殊性质:所有的 $v_{i}$ 互不相同。