不难注意到:只有两种情况会导致输出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")