51nod 1267 4个数和为0

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

输入

第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)

输出

如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。

输入样例

5
-1
1
-5
2
4

输出样例

Yes


仍然是暴力加尺取。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int flag;
int main() {
    int n;
    int s[1000];
    scanf("%d",&n);
    for(int i = 0;i < n;i ++) {
        scanf("%d",&s[i]);
    }
    sort(s,s + 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;
            while(l < r) {
                int d = s[i] + s[j] + s[l] + s[r];
                if(d < 0) {
                    l ++;
                }
                else if(d > 0) {
                    r --;
                }
                else {
                    flag = 1;
                    break;
                }
            }
            if(flag) break;
        }
        if(flag) break;
    }
    if(flag) printf("Yes");
    else printf("No");
}
原文地址:https://www.cnblogs.com/8023spz/p/10874103.html