小白月赛-子段和

子段和

https://ac.nowcoder.com/acm/contest/11223/B

给定一个序列,问你有没有可能重新排列这个序列使得所有长度小于等于 22 的子区间和不等于 00。

using namespace std;
#include <string>
long long a[500000];
long long minn,maxn;
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
        if(a[i]<0)
            minn=a[i];
        else if(a[i]==0)
        {
            cout<<"NO";
            return 0;
        }
        else
            maxn=a[i];
    }
    long long fmax=minn,fmin=maxn;
    for(int i=0;i<n;i++)
    {
        if(a[i]>fmax&&a[i]<0)
        {
            fmax=a[i];
        }
        if(a[i]<0&&a[i]<minn)
        {
            minn=a[i];
        }
        if(a[i]>0&&a[i]<fmin)
        {
            fmin=a[i];
        }
        if(a[i]>0&&a[i]>maxn)
        {
            maxn=a[i];
        }
            
    }
    if(maxn==fmin&&minn==fmax&&minn+maxn==0)
        cout<<"NO";
    else
        cout<<"YES";
        
        
        
        
        
}
全部评论
感觉只需要判断所有数的绝对值是否相等 如果全部相等且有一个负数 或者有0存在 就是NO其他都是YES 代码可以简洁很多
1 回复 分享
发布于 2022-03-28 23:29

相关推荐

点赞 评论 收藏
分享
头像
08-05 15:59
已编辑
乐山师范学院 运维工程师
点赞 评论 收藏
分享
08-05 15:27
南华大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务