题目链接: https://www.nowcoder.com/acm/contest/90/J
这道题可以倒着去想,因为每次操作的时候最大值与其他的数的差会减1,反过来就相当于其他数不变,最大值减了1,那么按照这样,我们只需要找出最小值,然后计算出每一个数需要操作多少次才能减成最小值,得到的这个数就是要求的操作数,又根据题意又可以得出 最终的数=最小数+操作数。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int pre[1000005];
int n,m;
int main()
{
scanf("%d",&n);
while(n--){
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d",&pre[i]);
}
sort(pre,pre+m);
int sum = 0;
for(int i=1;i<m;i++){
sum += (pre[i] - pre[0]);
}
cout<<sum<<" "<<sum + pre[0]<<endl;
}
return 0;
}