题目链接:
https://hihocoder.com/problemset/problem/1619
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定一个数组A1, A2, ... AN,每次操作可以从中选定一个元素Ai,把除了Ai之外的所有元素都加1。
问最少几次操作可以实现“共同富裕”,即数组中所有元素都相等。
例如对于[1, 1, 1, 2, 3]经过3步:[1, 1, 1, 2, 3] -> [2, 2, 2, 3, 3] -> [3, 3, 3, 3, 4] -> [4, 4, 4, 4, 4]。
输入
第一行包含一个整数N。(1 ≤ N ≤ 100000)
以下N行包含N个整数A1, A2, ... AN。 (1 ≤ Ai ≤ 100000)
输出
最小的操作数
样例输入
5 1 1 1 2 3
样例输出
3
题目分析:
显然,我们选取不变的数字不可能是最小值,因为最小值不变,其他变换,差距会进一步拉大,所以每次操作应该取最大值。最小步数应该是其他数和最小值的差之和。
#include<iostream>
#include<algorithm>
using namespace std;
int a[100001];
int main(void)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
long long ans=0;
for(int i=0;i<n;i++)
{
ans+=(a[i]-a[0]);
}
cout<<ans<<endl;
}