题目描述
给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。
Input
第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。
Input示例
5
-1
1
-5
2
4
Output示例
Yes
 #include <algorithm>
#include <iostream> using namespace std; int n,a[],cnt;
int if_ok; struct node_num
{
int l,r,tot;
}num[*+]; bool cmp(node_num a,node_num b)
{
return a.tot<b.tot;
} int main()
{
cin>>n;
for(int i=;i<=n;i++)
cin>>a[i]; sort(a+,a+n+);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
num[++cnt].l=a[i];
num[cnt].r=a[j];
num[cnt].tot=a[i]+a[j];
}
sort(num+,num+cnt+,cmp);
int l=,r=cnt;
while(l<r)
{
int sum=num[l].tot+num[r].tot;
if(sum==&&num[l].l!=num[r].l&&num[l].l!=num[r].r&&num[l].r!=num[r].l&&num[l].r!=num[r].r)
{ if_ok=; break; }
if(sum<) l++;
else r--;
/* int midd=(l+r)/2;
if(num[l].tot+num[midd].tot<0) l=midd+1;
if(num[r].tot+num[midd].tot>0) r=midd-1;
*/ }
if(if_ok) cout<<"Yes";
else cout<<"No";
return ;
}
05-11 17:54