1267 4个数和为0(二分,枚举)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43540515/article/details/102749465

给出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;
}
 

猜你喜欢

转载自blog.csdn.net/weixin_43540515/article/details/102749465