题目描述
给出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 ;
}

最新文章

  1. TCP、UDP、IP 协议分析
  2. 并查集(删除) UVA 11987 Almost Union-Find
  3. 学习笔记(一)——MVC扩展
  4. ps白平衡
  5. svn 问题汇总
  6. c语言中-----分配内存函数
  7. [CLR via C#]1.2 将托管模块合并成程序集
  8. 【POJ2186】受牛仰慕的牛
  9. ASP.NET MVC 5 基本构成
  10. Android -- 从源码的角度一步步打造自己的TextView
  11. (二)SVN的安装
  12. LLDB 中从地址设置为变量
  13. vs2017cpu占用过高解决方案
  14. java Thread 类的源码阅读(oracle jdk1.8)
  15. 如何让 curl 命令通过代理访问
  16. 2018.10.25 bzoj3928: [Cerc2014] Outer space invaders(区间dp)
  17. Entity Framework 6 (7) vs NHibernate 4: DDD perspective(纯净DDD很难很难...)
  18. IOS应用提交所需的ICON
  19. where常用运算符
  20. ActionBar 笔记

热门文章

  1. Unity - 简单实例化的应用
  2. $CF1141C Polycarp Restores Permutation$
  3. CSS------选择器-----------选择器的分组、属性选择器
  4. C# linq学习【转】
  5. Unity学习-碰撞检测(七)
  6. Mysql中的索引()key 、primary key 、unique key 与index区别)
  7. 如何扒取一个网站的HTML和CSS源码
  8. jQuery——类的添加与删除
  9. CSS——伪类
  10. angular 零碎