给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等。从中找出所有和 = 0的3个数的组合。如果没有这样的组合,输出No Solution。如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序。

 
Input
第1行,1个数N,N为数组的长度(0 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果没有符合条件的组合,输出No Solution。
如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
Input示例
7
-3
-2
-1
0
1
2
3
Output示例
-3 0 3
-3 1 2
-2 -1 3
-2 0 2
-1 0 1 二重循环+二分 O(N^2LogN)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std; int a[]; bool binary_find(int l, int r, int x)
{
while (l <= r) {
int m = (l+r)>>;
if (a[m] > x)
r = m - ;
else if (a[m] < x)
l = m + ;
else
return ;
}
return ;
} int main()
{
//freopen("1.txt", "r", stdin);
int n;
scanf("%d", &n);
for (int i = ; i < n; i++)
scanf("%d", &a[i]);
sort(a, a+n);
int flag = ;
for (int i = ; i < n; i++) {
for (int j = i+; j < n; j++) {
int x = -(a[i]+a[j]);
// printf("%d %d %d\n", a[i], a[j], x);
if (binary_find(j+, n-, x)) {
printf("%d %d %d\n", a[i], a[j], x);
flag = ;
}
}
}
if (!flag) printf("No Solution\n"); return ;
}

更快的二分 同时搜索两个数

#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std; int a[]; int main()
{
//freopen("1.txt", "r", stdin);
int n;
scanf("%d", &n);
for (int i = ; i < n; i++)
scanf("%d", &a[i]);
sort(a, a+n); int flag = ;
for (int i = ; i < n; i++) {
int j, k, x;
j = i+;
k = n-;
while (j < k) {
x = a[i]+a[j]+a[k];
if (x < )
j++;
else if (x > )
k--;
else {
printf("%d %d %d\n", a[i], a[j], a[k]);
flag = ;
j++; k--;
}
}
}
if (!flag) printf("No Solution\n"); return ;
}
 

[51nod] 1090 3个数和为0 暴力+二分的更多相关文章

  1. 51Nod 1090 3个数和为0(暴力)

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5         难度:1级算法题 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  2. 51nod 1090 3个数和为0【二分】

    1090 3个数和为0 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从 ...

  3. 51Nod 1090 3个数和为0 set 二分优化

    给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...

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

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

  5. 51Nod 1090 3个数和为0

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 思路:排序 三个for循环 但是要控制循环 不能从头开 ...

  6. 51nod——T1267 4个数和为0

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1267 题目描述 给出N个整数,你来判断一下是否能够选出4个数,他们的和 ...

  7. 1001 数组中和等于K的数对 1090 3个数和为0

    二分查找.对数组每个V[i],在其中查找K-V[i],查找完成后修改v[i]避免重复输出 #include<iostream> #include<algorithm> #inc ...

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

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

  9. 51nod 1267 4个数和为0

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

随机推荐

  1. Node.js版-七夕无事,人艰勿拆,求别说...

    七夕无事,端坐电脑前coding,略苦逼,人艰勿拆,求别说...

  2. js闭包的定义

    通过函数字面量创建的函数对象包含一个连接到外部上下文的连接,这叫做闭包. 还有一种定义:函数可以访问它被创建时所处的上下文环境,叫做闭包.

  3. go反射实例

    需求分析: 如在rocketmq的网络通信中,所有通信数据包以如下形式传输: (注:rocketmq的java结构体,这里使用了go形式表示) type RemotingCommand struct ...

  4. ArcGIS js api三种查询功能

    转自https://blog.csdn.net/lovecarpenter/article/details/52669777

  5. 【转载】rabbitmq的发布确认和事务

    地址:https://my.oschina.net/lzhaoqiang/blog/670749 摘要: 介绍confirm的工作机制.使用spring-amqp介绍事务以及发布确认的使用方式.因为事 ...

  6. Spring框架总结(五)

    自动装配(了解) 根据名称自动装配:autowire="byName" 自动去IOC容器中找与属性名同名的引用的对象,并自动注入 延续使用user.dao.service.acti ...

  7. 完全卸载memcached的方法(CentOS)

    前阵子给服务器装了个memcached,4G的内存,想给网站提提速,实际上不但没有明显效果,反倒耗费内存,看着碍眼,于是想卸载,网上各种搜索+自己实践,搞出一个傻瓜方案来: 1.首先查找你的memca ...

  8. ettercap dns_spoof

    首先编辑网页,打开apache2服务器,编辑好etter.dns 然后开始ettercap -G 的操作 sniff选择好自己使用的网卡 scan hosts ,扫描完将目标和网关添加到目标一目标二 ...

  9. javascript的那些事儿你都懂了吗

    javascript从开始的验证表单的脚本语言发展到现在能运行在服务器上,其影响力不断的提升.自己作为一个做前端的,编写js是必不可少,从自己学习js的历程来看其实也是比较吃力.要 学好它,还是的花费 ...

  10. http 错误代码

    2xx  成功  200  正常:请求已完成.  201  正常:紧接 POST 命令.  202  正常:已接受用于处理,但处理尚未完成.  203  正常:部分信息 — 返回的信息只是一部分.   ...