首页 > 试题广场 >

缝缝补补

[编程题]缝缝补补
  • 热度指数:125 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}你有一些卡牌。每张卡牌上写着一个整数,叫做它的点数。
\hspace{15pt}一开始你只有一张卡牌,它的点数为 x。现在你希望最终得到一排一共 n 张卡牌,从左到右的点数依次为 \{a_1, a_2, \dots, a_n\}
\hspace{15pt}你可以进行若干次操作(也可以一次都不做),每次操作只能选择以下三种之一:
\hspace{23pt}\bullet\,选择一张卡牌,将它的点数减少 1
\hspace{23pt}\bullet\,选择一张卡牌,将它的点数增加 1
\hspace{23pt}\bullet\,选择一张卡牌,复制它得到一张新的卡牌(新卡牌点数与被复制的卡牌相同),并把新卡牌插入到当前这排卡牌的任意位置。
\hspace{15pt}说明:在操作过程中,卡牌点数允许变成 0 或负数;但是最终的点数必须和给定的 \{a_1, a_2, \dots, a_n\} 完全一致。
\hspace{15pt}请你计算最少需要多少次操作,才能达到目标。

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 2\times 10^{5}\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入两个整数 nx \left(1 \leqq n \leqq 2\times 10^{5};\ 1 \leqq x \leqq 10^{9}\right),表示目标卡牌数量与初始卡牌点数。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \dots, a_n \left(1 \leqq a_i \leqq 10^{9}\right),表示目标序列。
\hspace{15pt}除此之外,保证单个测试文件的 \sum n 不超过 4\times 10^{5}


输出描述:
\hspace{15pt}对于每一组测试数据,新起一行。输出答案。
示例1

输入

3
1 5
5
2 10
1 100
4 7
7 7 7 7

输出

0
100
3

说明

\hspace{23pt}\bullet\,第一组数据目标只有 1 张卡牌,初始点数就是 5,因此不需要任何操作;
\hspace{23pt}\bullet\,第三组数据需要得到 4 张点数全为 7 的卡牌,只需要复制 3 次即可。

这道题你会答吗?花几分钟告诉大家答案吧!