又是一个思维题。
本题要找是否存在一个序列使得临近两数的和始终不等于0,很容易能想到先对数列进行排序,然后中间正负的两项即为最有可能和等于0的两项。假设这两个数为a[i]
和a[i+1]
吧。
此时,如果序列中存在一个数a[k]
,并a[k]!=a[i]
且a[k]!=a[i+1]
,这样把a[k]
移到a[i]
和a[i+1]
之间就能满足要求了。
所以本题的关键在于能否找到a[k]
。
因此,本题也就转化为了,数列是否仅仅由两个相反数排列组成,若是,则必不能满足题目要求;若存在另一个数a[k]
或者两个数不相反,则能满足题目要求。
这样思路就清晰了,我们可以用一个集合对数列进行去重,找到最终不重复的几个数,若是仅仅有两个数,我们再来看这两个数是否为相反数,若是,则输出"NO";反之,输出"YES"。
n = int(input())
nums = list(map(int, input().split()))
if 0 in nums:
print("NO")
exit()
res = set()
for i in range(n):
res.add(nums[i])
res = list(res)
if len(res) == 2 and res[0] + res[-1] == 0:
print("NO")
else:
print("YES")