思路:

首先我们能够很容易地想到,4个数的和,拆成两两相加:a+b=-c-d;

我们也能很轻松地求出两两之和,但是呢。。不同的和会存在相同的值相加,所以还要排除这个条件。具体操作就是标记一下,然后将和二分来操做

#include <stdio.h>
#include <map>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std; typedef long long LL; const int N=1e3+10; int a[N];
struct asd{
int x,y;
int sum;
};
asd q[N*N];
int n; bool cmp(asd s1,asd s2)
{
return s1.sum<s2.sum;
} int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int num=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
q[num].x=i;q[num].y=j;
q[num++].sum=a[i]+a[j];
}
}
sort(q,q+num,cmp);
int s,t;
s=0;
t=num-1;
while(s<num)
{
if(q[s].sum+q[t].sum==0)
{
if(q[s].x!=q[t].x&&q[s].x!=q[t].y&&q[s].y!=q[t].x&&q[s].y!=q[t].y)
{
printf("Yes\n");
return 0;
}
if(q[s].sum==q[s+1].sum)
s++;
else if(q[t].sum==q[t-1].sum)
t--;
else
{
s++;
t--;
}
}
else if(q[s].sum+q[t].sum<0)
s++;
else
t--;
}
printf("No\n");
return 0;
}

最新文章

  1. python学习道路(day10note)(线程,进程)
  2. BZOJ 2456 杂题 卡内存
  3. (2016弱校联盟十一专场10.2) A.Nearest Neighbor Search
  4. 【Python】实现5!+4!+3!+2!+1!
  5. IP TCP HTTP Socket的区别
  6. UINavigationController与UITabbarController的样式
  7. TortoiseGit连接github不用每次输入用户名和密码的方法
  8. B-JUI(Best jQuery UI) 前端框架
  9. 基于visual Studio2013解决C语言竞赛题之0605strcat
  10. /bin/bash^M: bad interpreter: No such file or directory
  11. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
  12. FineReport单元格扩展与父子格设置
  13. 第4章 PCIe总线概述
  14. 1.phpStrom连接远程代码
  15. [LuoguP1113] 杂物 - 拓扑排序
  16. OpLogMergeMessage-OutOfMemoryError-JavaHeapSpace
  17. 自学Python之路-django
  18. appcms SSRF 绕过漏洞[转载]
  19. shell脚本--cut命令与awk简单使用
  20. maven配置jdk1.8环境

热门文章

  1. Thinking in React(翻译)
  2. react map 遍历
  3. mysql 内置函数大全 mysql内置函数大全
  4. hdu 5358 First One 2015多校联合训练赛#6 枚举
  5. android-auto-scroll-view-pager
  6. ubuntu git ssh不通
  7. Arcgis Engine(ae)接口详解(7):地图(map)操作
  8. 嵌入式开发之davinci--- 8168 question about capture PAL on 8168
  9. Android SDK更新失败的解决方案(原创)
  10. WM_GETMINMAXINFO的作用 .