版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
给出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<bits/stdc++.h>
using namespace std;
#define ll long long
int a[1005];
int main()
{
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n-3;i++)
for(int j=i+1;j<=n-2;j++)
{
ll tmp=a[i]+a[j];
int l=j+1,r=n;
while(l<r)
{
if(a[i]+a[j]+a[l]+a[r]==0)
{
cout<<"Yes";
return 0;
}
else if(a[i]+a[j]+a[l]+a[r]<0)
l++;
else
r--;
}
}
cout<<"No";
return 0;
}