4个数和为0

来源:互联网 发布:汇编语言用什么软件 编辑:程序博客网 时间:2024/05/17 22:34

4个数和为0

 
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。
Input
第1行,1个数N,N为数组的长度(4 <= N <= 1000) 
第2 - N + 1行:Aii(-10^9 <= Aii <= 10^9)
Output
如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。
Sample Input
5-11-524
Sample Output
Yes
如果单纯的用暴力的话会超时,应该用上二分,这样才不会爆。
代码如下:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    int a[10000];    int n,m,i,j,k,high,low;    scanf("%d",&n);    for(i=0; i<n; i++)    {        scanf("%d",&a[i]);    }    sort(a,a+n);    int f=0;    for(i=0; i<n-4; i++)    {        for(j=i+1; j<n-2; j++)        {            if(f==1)                break;            high=j+1;            low=n-1;            while(high<low)            {                int t=a[i]+a[j]+a[high]+a[low];                if(t==0)                {                    f=1;//找到了4个数就结束                    break;                }                if(t>0)                {                    low--;                }                if(t<0)                {                    high++;                }            }            if(f==1)                break;        }    }    if(f==1)    {        printf("Yes\n");    }    else    {        printf("No\n");    }    return 0;}


原创粉丝点击