CF2007C Dora and C++
题目描述
Dora 刚学了编程语言C++!
但是,她一点也不明白C++的含义。 她认为C++是两种在长度为 $n$ 的数组 $c$ 上的加法操作。Dora 有两个整数 $ a $ 与 $ b $ 。 每一次操作,她可以选择一件事情去做。
- 选择一个整数 $ i $ ,其中 $ 1 \leq i \leq n $ ,然后把 $ c_i $ 加上 $ a $ 。
- 选择一个整数 $ i $ ,其中 $ 1 \leq i \leq n $ ,然后把 $ c_i $ 加上 $ b $ 。
注意,这里 $ a $ 与 $ b $ 是常数,且他们可以相同。
让我们规定一个数组的值域 $ d $ 为 $ \max(d_i) - \min(d_i) $ 。仅举几例:数组 $ [1, 2, 3, 4] $ 的值域是 $ 4 - 1 = 3 $ ,数组 $ [5, 2, 8, 2, 2, 1] $ 的值域是 $ 8 - 1 = 7 $ , 数组 $ [3, 3, 3] $ 的值域是 $ 3 - 3 = 0 $ 。
经过若干次操作 (可能是 $ 0 $ ), Dora 计算出了新数组的值域。 请你帮助 Dora 最小化其值,但是自从 Dora 爱上了仅凭自己探索,你只需要告诉她最小化后的值。
输入格式
每一个测试点有多组数据。第一行包括一个整数 $ t $ $( 1 \leq t \leq 10^4 )$ 代表测试数据的组数。
对于每组测试数据,第一行有三个整数 $ n $ , $ a $ $ b $ $( 1 \leq n \leq 10^5 $ , $ 1 \leq a, b \leq 10^9 )$ 表示数组 $ c $ 的长度,以及两个常数 $a$ $b$ 的值。
第二行包括 $ n $ 个整数 $ c_1, c_2, \ldots, c_n $ ( $ 1 \leq c_i \leq 10^9 $ ) 代表数组 $ c $ 的初始值。
保证对于全部的数据 $ Σn \leq 10^5 $。
输出格式
对与每组测试数据,你需要输出一个整数,表示若干次操作后数组的值域可能到达的最小值。
#### 样例解释
第一组数据中,我们可以将 $ c_1 = 1 $ 加上 $ a = 5 $ 。 数组 $ c $ 将会变为 $ [6, 3, 4, 4] $ ,其值域为 $ 3 $ 。注意,达到正解的方案不唯一。
第二组数据中,我们可以将 $ c_1 = 1 $ 加上 $ a = 2 $ ,然后将 $ c_1 = 加上 $ by $ b = 3 $ 。当然,我们也可以将 $ c_2 = 3 $ 加上 $ b = 3 $ ,之后将 $ c_3 = 4 $ 加上 $ a = 2 $ 。数组 $ c $ 将会变为 $ [6, 6, 6, 6] $ ,其值域为 $ 0 $ .
说明/提示
In the first test case, we can increase $ c_1 = 1 $ by $ a = 5 $ . The array $ c $ will become $ [6, 3, 4, 4] $ , and the range is $ 3 $ . Note that there is more than one way to reach the answer.
In the second test case, we can increase $ c_1 = 1 $ by $ a = 2 $ and then increase $ c_1 = 3 $ by $ b = 3 $ . Also, we can increase $ c_2 = 3 $ by $ b = 3 $ and increase $ c_3 = 4 $ by $ a = 2 $ . The array $ c $ will become $ [6, 6, 6, 6] $ , and the range is $ 0 $ .