不难注意到:只有两种情况会导致输出NO
1: 序列自身包含0
2: 序列只含有两种元素并且这两种元素互为相反数
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ll n;
cin >> n;
vector <ll> a(n + 1);
bool flag = 0;//用于判断序列中是否含有0
for(int i = 1; i <= n; i++) {
cin >> a[i];
if(a[i] == 0) flag = 1;
} if(flag == 1) {
cout << "NO" << '\n';//如果含有0则直接输出NO
return 0;
} sort(a.begin() + 1, a.end());
a.erase(unique(a.begin() + 1, a.end()), a.end());//通过排序+去重判断序列中是否只含有两种元素且两种元素为相反数 复杂度O(nlogn)
if(a.size() == 3 && a[1] == -a[2]) cout << "NO" << '\n';
else cout << "YES" << '\n';//其余情况全部输出YES
return 0;
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号