考虑输出NO的情况:已知在长度<=2的字段和为0时输出NO,而长度<=2的字段和为0有以下两种情况:1.某一个元素为0,此时将该元素视为单独的长度<=2的字段。2.序列内只存在两种元素,即n和-n,在推断出以上两种判断条件后,我们对序列内的元素种类进行判断,最后得出结果(我是彩笔补药骂我)

#include <iostream>
#include <map>
#include <vector>
using namespace std;
typedef long long ll;
int main() {
    int n;
    cin>>n;
    vector<int>v(n+1);
    map<ll,ll>mp;
    for (int i=1;i<=n;i++) {
        int x;
        cin>>x;
        if(x==0){
            cout<<"NO"<<endl;
            return 0;
        }
        mp[x]++;
    }
    if(mp.size()>=3)
    {
        cout<<"YES"<<endl;
    }
    else if(mp.size()==2)
    {
        ll sum=0;
        for(auto it:mp)
        {
            sum+=it.first;
        }
        if(sum==0)cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
    }
    else cout<<"YES"<<endl;
}
// 64 位输出请用 printf("%lld")