题目链接: 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;
}