Codeforces 1529.B

因为题目要求任意两个数相减的绝对值不小于最大值,根据数学分析,如果所有数字都为正,那么不能满足要求,所以,答案的初值赋予数组中非正整数的个数,如果多出的那个正数满足题意,那么答案加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题解,略有修改

上一篇:[SPOJ1812-LCS2]Longest Common Substring II


下一篇:【SCOI2013】摩托车交易 题解