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

解题思路:这道题被归纳在排序和二分的目录下,我们就试着通过排序和二分来解决这题。从n个数中找4个和为0的数,可以先将这些数两两组合,这样得
到的数升序排序,通过二分查找,找到和为0的组合。不过这种算法只能勉强算为二分吧。
 #include<cstdio>
#include<cstring>
#include<algorithm>
#define maxs 1010
int num[maxs];
struct node
{
int x;
int y;
int sum;
}a[maxs*maxs];
int my_cmp(node a,node b)
{
return a.sum<b.sum;
}
using namespace std;
int main()
{
int n,i,j,flag;
int k=;
flag=;
scanf("%d",&n);
for(i=;i<=n;i++)
{
scanf("%d",&num[i]);
for(j=;j<i;j++)
{
a[k].x=i;
a[k].y=j;
a[k].sum=num[i]+num[j];
k++;
}
}
sort(a,a+k,my_cmp);
i=;
j=k-;
while(i<k)
{
if(a[i].sum+a[j].sum==)
{
if(a[i].x!=a[j].x&&a[i].x!=a[j].y&&a[i].y!=a[j].x&&a[i].y!=a[j].y)
{
flag=;
break;
}
if(a[i].sum==a[i+].sum)
{
i++;
}
else if(a[j].sum==a[j-].sum)
{
j--;
}
else
{
i++;
j--;
}
}
else if(a[i].sum+a[j].sum<)
{
i++;
}
else
{
j--;
}
}
if(flag)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return ;
}

4个数的和为0 51nod 1267的更多相关文章

  1. 51nod 1267 4个数和为0 思路:哈希map+避免重复的点

    题目: 总结大佬们的思路: 思路1:所有数两两求和,存入map中,每次判断有没有相反数被标记过. 思路2:对所有数排序,排完所有数两两求和,结果正好是排好序的.然后扫一遍,二分查找看之前有没有相反数存 ...

  2. POJ 1401:Factorial 求一个数阶乘的末尾0的个数

    Factorial Time Limit: 1500MS   Memory Limit: 65536K Total Submissions: 15137   Accepted: 9349 Descri ...

  3. 51nod 1267:4个数和为0 哈希

    1267 4个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出&qu ...

  4. 51Nod 1267 4个数和为0 二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No".Input第1行,1个数N,N为数组的长度(4 <= ...

  5. [51nod] 1267 4个数和为0 暴力+二分

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  6. 51nod 1267 4个数和为0

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出&qu ...

  7. 51nod 1267 二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 1267 4个数和为0 基准时间限制:1 秒 空间限制:13107 ...

  8. 3sum(从数组中找出三个数的和为0)

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  9. (数学 尾0的个数) 51nod1003 阶乘后面0的数量

    n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. 收起   输入 一个数N(1 <= N <= 10^9) 输出 输出0的数量 输入样例 5 ...

随机推荐

  1. 从Windows复制文件到Linux

    PuTTY自带的pscp非常好用. 使用方式和Linux中的scp命令很像,格式如下: pscp 文件 用户名@LinuxIP:目录 例如: pscp d:/a.iso root@192.168.1. ...

  2. 一次JVM内存调优过程

    项目中,有个同事写的JOB,使用到查询数据库大量历史协议数据(大概300W左右),由于对存放数据的list或map没有做“用完即时声明释放”. 导致此Jar部署在windows service后,进程 ...

  3. Linux系统初学-第三课 Linux网络配置1

    Linux系统初学-第三课 Linux网络配置 1.动态IP配置 配置文件路径 /etc/sysconfig/network-scripts/ ls查看网卡eth0,其中HWADDR值得获取:ifco ...

  4. sign

    sign字段构成:登录类型(2Bytes) + userid(不定长,最长10Bytes,用户id或设备id) + time(10Bytes) + token(32Bytes).其中:token = ...

  5. Altium Designer (DXP) 复制粘贴,放器件 出错报异常的原因

    安装好Altium Designer (DXP) 09板和2013后,运行后原理图复制粘贴元件或者放心的器件后出现下面异常, 原因是: 1.未启动 Print Spooler服务 2.没有安装任何打印 ...

  6. 大数据学习之Hadoop快速入门

    1.Hadoop生态概况 Hadoop是一个由Apache基金会所开发的分布式系统集成架构,用户可以在不了解分布式底层细节情况下,开发分布式程序,充分利用集群的威力来进行高速运算与存储,具有可靠.高效 ...

  7. 树莓派安装samba服务

    1.安装 sudo apt-get update sudo apt-get install samba sudo apt-get install samba-common-bin 2.配置 sudo ...

  8. python3内置函数大全

    由于面试的时候有时候会问到python的几个基本内置函数,由于记不太清,就比较难受,于是呕心沥血总结了一下python3的基本内置函数 Github源码:        https://github. ...

  9. Mysql Explain的简单使用

    Mysql Explain 主要重要的字段有上面红色方框圈出来的那几个. type: 连接类型,一个好的SQL语句至少要达到range级别,杜绝出现all级别. key: 使用到的索引名,如果没有选择 ...

  10. Kafka跨网络访问设置

    实际场景: kafka应用通过docker进行部署并暴露出不同kafka节点到不同的指定端口: 业务系统通过虚拟机进行部署: docker宿主机与业务系统在同一个局域网: 报错: 业务系统连接kafk ...