SAMPLE INPUT
8
1
10
2
0 0
3
-1 2 0
4
2 10 1 7
2
2 3
5
3 2 -4 -2 0
2
-1 1
1
-2
SAMPLE OUTPUT
10
0
2
5
2
2
2
-2
题意
t组输入,每次输入整数n,接下来输入n个数,每次操作选其中一个数删除,剩下所有数字减去这个数,直到所有数都删除,求操作中每次最小数的最大值
比如[2,10,1,7]→[1,9,6]→[8,5]→[3]
[2,10,1,7]最小数是1,第一次操作所有数字减去1
[1,9,6] 最小数是1 , 第二次操作所有数字减去1
[8,5]最小数是5 ,第三次操作所有数字减去5
[3]最小数是3,第四次操作所有数字减去3
最小数的最大值是5
思路
不难发现每次操作都是减去最小数,然后每次操作比较最小值的大小
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int a[N];
int main()
{
ios::sync_with_stdio(false);
int t, n;
cin >> t;
while (t--)
{
cin >> n;
memset(a, 0, sizeof(a));
for (int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);//从小到大排序,最大值在最后取
int op = a[1];
int ans = a[n];
int t = 1;
int mm = 0;
while (t < n)
{
/*for (int i = t; i <= n; i++)
{
cout << a[i] << " ";
}
cout << endl;*/
mm+=a[t];
a[t+1]-=mm;
op=max(op,a[t+1]);
t++;
}
cout << op << endl;
}
return 0;
}
/*-4 -2 0 2 3
0 2 4 6 7
0 0 2 4 5
0 0 0 2 3
0 0 0 0 1
0 2 5 10
0 0 3 7
0 0 0 4*/