序列自动机
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

凡凡有一个好用的序列自动机,可以帮他快速改变一个序列。当给定一个序列 A 时,凡凡每次可以使用自动机的以下任意两种操作之一来改变当前序列,操作次数不限。

①:选择序列中任意一个数 a_i,将 a_i 的大小减 1

②:选择序列中任意一个数 a_i,将除去 a_i 以外其他所有数的大小减 1

请问为使该序列中所有数字的大小相等,凡凡至少需要使用多少次他的自动机。

输入描述:

第一行输入一个正整数 n\ (1\le n \le 2\times10^5),表示序列的长度。

第二行输入 n 个正整数 a_i\ (1 \le a_i \le 2\times10^5),分别表示序列中第 i 个数字的大小。

输出描述:

输出一个整数 m,表示使该序列中所有数字的大小相等所花费自动机的最小操作次数。
示例1

输入

复制
1
114514

输出

复制
0

说明

对于第一组测试用例,序列中仅有一个数字,所以此时已经满足序列中所有数字相等,总操作次数为 0
示例2

输入

复制
4
19 19 8 10

输出

复制
20

说明

对于第二组测试用例,可以先进行两次②操作,每次对除去 a_3 以外的 \{a_1,a_2,a_4\}1, 花费为 2,此时序列变为 \{17,17,8,8\}

再对此时的 a_1a_2 这两个数分别进行 9 次①操作,花费为2×9=18,最终的序列为\{8,8,8,8\}

此时的总操作数为 2+18=20,可以证明此时已经是最小操作数。

备注:

可能的操作方法不唯一,最后变成的序列也不唯一。