首页 > 其他 > 详细

51Nod1267 4个数和为0

时间:2019-07-30 00:00:05      阅读:165      评论:0      收藏:0      [点我收藏+]

题目

给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。
n<=1e3

思路

《挑战程序设计竞赛》的经典题,预处理两层+二分

代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[1020],ct;
struct E{
    ll w;
    int p1,p2;
}e[600020];
int cmp(E x,E y){
    return x.w<y.w;
}
int main(){
    scanf("%lld",&n);
    for(int i=1;i<=n;i++){
        scanf("%lld",&a[i]);
    }
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            e[++ct]=(E){a[i]+a[j],i,j};
        }
    }
    sort(e+1,e+1+ct,cmp);
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            int l=1,r=ct,mid;
            while(l<=r){
                mid=(l+r)>>1;
                if(a[i]+a[j]+e[mid].w<0){
                    l=mid+1;
                }
                else{
                    r=mid-1;
                }
            }
            for(int k=l;a[i]+a[j]+e[k].w==0;k++){
                if(i!=e[k].p1&&i!=e[k].p2&&j!=e[k].p1&&j!=e[k].p2){
                    printf("Yes\n");
                    return 0;
                }
            }
        }
    }
    printf("No\n");
    return 0;
}

51Nod1267 4个数和为0

原文:https://www.cnblogs.com/sz-wcc/p/11266985.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!