51Nod1267 4个数和为0
         
                原创
        
    
    
                
             ©著作权归作者所有:来自51CTO博客作者WonderKing66的原创作品,请联系作者获取转载授权,否则将追究法律责任        
            
                    
                
给出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
 
思路:
先排序,找出两个数,在二分两个数。
算法时间复杂度O(n^3)
AC代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1005;
typedef long long ll;
ll a[N],b[N];
int main()
{ 
  ll n,i,j,k=0;
  cin>>n;
  for(i=0;i<n;i++)
    scanf("%lld",&a[i]);
  sort(a,a+n);      
  for(i=0;i<n;i++)
    for(j=i+1;j<n;j++)
    {
      ll t=-a[i]-a[j];
      ll r=n-1,l=j+1;
      while(l<r)
      {
        if(a[l]+a[r]==t)
        {
          cout<<"Yes"<<endl;
          goto end;
        }
        else if(a[l]+a[r]<t)
          l++;
        else r--;
      }
    }
  cout<<"No"<<endl;
  end: ;
  return 0;
 }