因为题目要求任意两个数相减的绝对值不小于最大值,根据数学分析,如果所有数字都为正,那么不能满足要求,所以,答案的初值赋予数组中非正整数的个数,如果多出的那个正数满足题意,那么答案加1
#include<iostream>
#include<cmath>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
const int maxn = 1e5 + 10;
using namespace std;
typedef long long ll;
int main()
{
int t, n, a[maxn], ans, mn;
bool flag;
cin >> t;
while (t--)
{
cin >> n, ans = 0;
for (int i = 1; i <= n; ++i)
cin >> a[i], ans += (a[i] <= 0);//统计非正整数的个数
sort(a + 1, a + n + 1), mn = INT_MAX;
for (int i = 1; i <= n; ++i)
if (a[i] > 0)
mn = min(mn, a[i]);//mn表示数组中正数的最小值
flag = (mn < INT_MAX);//如果数组中存在正数,那么flag为1,否则为0
for (int i = 2; i <= n; ++i)
if (a[i] <= 0)
flag &= (a[i] - a[i - 1] >= mn);//如果不满足题意,那么flag为0
if (flag)//如果多出的这个正数满足要求,那么答案加1
cout << ans + 1 << endl;
else
cout << ans << endl;
}
return 0;
}
答案copy题解,略有修改