51Nod - 1267:4個數和爲0

4個數和爲0 51Nod - 1267

題目描述:
給出N個整數,你來判斷一下是否能夠選出4個數,他們的和爲0,可以則輸出”Yes”,否則輸出”No”。
Input
第1行,1個數N,N爲數組的長度(4 <= N <= 1000)
第2 - N + 1行:Ai(-10^9 <= Ai <= 10^9)
Output
如果可以選出4個數,使得他們的和爲0,則輸出”Yes”,否則輸出”No”。
Sample Input
5
-1
1
-5
2
4
Sample Output
Yes

先排序,自左向右遍歷枚舉兩個值,求和sum,然後從剩下的區間內從兩邊逼近直到找到和爲-1*sum的另外兩個值;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
ll a[1050];
int main(){
    int n,p=0;
    cin>>n;
    for(int i=0;i<n;i++)
        scanf("%lld",&a[i]);
    sort(a,a+n);
    for(int i=0;i<n-3;i++){
        for(int j=i+1;j<n-2;j++){
            int l=j+1,r=n-1,sum=-1*(a[i]+a[j]);
            while(l<r){
                if(a[l]+a[r]<sum)
                    l++;
                else if(a[l]+a[r]>sum)
                    r--;
                else {p=1;break;}
            }
            if(p) break;
        }
        if(p) break;
    }
    if(p) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    return 0;
}
發佈了26 篇原創文章 · 獲贊 8 · 訪問量 5857
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章