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

 
Input
  1. 1行,1个数NN为数组的长度(0 <= N <= 1000)
  2. 2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
  1. 如果没有符合条件的组合,输出No Solution
  2. 如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则继续按照第二小的数排序。每行3个数,中间用空格分隔,并且这3个数按照从小到大的顺序排列。
Input示例
  1. 7
  2. -3
  3. -2
  4. -1
  5. 0
  6. 1
  7. 2
  8. 3
Output示例
  1. -3 0 3
  2. -3 1 2
  3. -2 -1 3
  4. -2 0 2
  5. -1 0 1
  6.  
  7. 二重循环+二分 O(N^2LogN)
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int a[];
  7.  
  8. bool binary_find(int l, int r, int x)
  9. {
  10. while (l <= r) {
  11. int m = (l+r)>>;
  12. if (a[m] > x)
  13. r = m - ;
  14. else if (a[m] < x)
  15. l = m + ;
  16. else
  17. return ;
  18. }
  19. return ;
  20. }
  21.  
  22. int main()
  23. {
  24. //freopen("1.txt", "r", stdin);
  25. int n;
  26. scanf("%d", &n);
  27. for (int i = ; i < n; i++)
  28. scanf("%d", &a[i]);
  29. sort(a, a+n);
  30. int flag = ;
  31. for (int i = ; i < n; i++) {
  32. for (int j = i+; j < n; j++) {
  33. int x = -(a[i]+a[j]);
  34. // printf("%d %d %d\n", a[i], a[j], x);
  35. if (binary_find(j+, n-, x)) {
  36. printf("%d %d %d\n", a[i], a[j], x);
  37. flag = ;
  38. }
  39. }
  40. }
  41. if (!flag) printf("No Solution\n");
  42.  
  43. return ;
  44. }

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

  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int a[];
  7.  
  8. int main()
  9. {
  10. //freopen("1.txt", "r", stdin);
  11. int n;
  12. scanf("%d", &n);
  13. for (int i = ; i < n; i++)
  14. scanf("%d", &a[i]);
  15. sort(a, a+n);
  16.  
  17. int flag = ;
  18. for (int i = ; i < n; i++) {
  19. int j, k, x;
  20. j = i+;
  21. k = n-;
  22. while (j < k) {
  23. x = a[i]+a[j]+a[k];
  24. if (x < )
  25. j++;
  26. else if (x > )
  27. k--;
  28. else {
  29. printf("%d %d %d\n", a[i], a[j], a[k]);
  30. flag = ;
  31. j++; k--;
  32. }
  33. }
  34. }
  35. if (!flag) printf("No Solution\n");
  36.  
  37. return ;
  38. }
  1.  

[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. 使用myeclipse开发java,解决java中继承JFrame类出现The type JFrame is not accessible due to restriction的问题

    在java中创建窗体,导入了java中的JFrame类,之后会出现错误: Access restriction: The type QName is not accessible due to res ...

  2. quartz的配置文件

    quartz在运行时默认加载的是工程目录下的quartz.properties文件,如果工程目录下没有quartz.properties文件,它就会去读取quartz jar包下的quartz.pro ...

  3. jqgrid 自动换行

    <style>.ui-jqgrid tr.jqgrow td { white-space: normal !important; height: auto; vertical-align: ...

  4. 使用jQuery解析JSON数据-已验证

    本文来源于:http://www.cnblogs.com/codeplus/archive/2011/07/18/2109544.html 上例中得到的JSON数据如下,是一个嵌套JSON: {&qu ...

  5. Codeforces 667C DP

    题意:给你一个字符串,这个字符串的构造方法如下:先选择一个长度大于4的前缀,然后每次向字符串尾部添加一个长度为2或者长度为3的后缀,不能添加连续的相同的后缀,问可能的后缀有哪些?并按字典序输出去. 思 ...

  6. 启动图。引导页以及EAIntroView的使用

    ios启动图: 1242 x 2208 (6plus)    R5.5位置 750 x 1334   (6)           R4.7位置 640 x 960     (4/4s)      2x ...

  7. 项目介绍4 y有用

    在青岛做了两年开发,大大小小参与过三个项目的开发,一个是某公司内部的人员管理系统,一个是物流项目,最近做的是一个电商项目. 前两个项目采用的是ssh框架搭建的,最近的项目采用的是ssm框架搭建的.在实 ...

  8. spring mabatis springmvc 看过

    .Spring中AOP的应用场景.Aop原理.好处? 答:AOP--Aspect Oriented Programming面向切面编程:用来封装横切关注点,具体可以在下面的场景中使用: Authent ...

  9. How to Get the Length of File in C

    How to get length of file in C //=== int fileLen(FILE *fp) { int nRet = -1; int nPosBak; nPosBak = f ...

  10. SQL 数据库 学习 007 通过一个示例简单介绍什么是字段、属性、列、元组、记录、表、主键、外键 (上)

    SQL 数据库 学习 007 通过一个示例简单介绍什么是字段.属性.列.元组.记录.表.主键.外键 (上) 我们来介绍一下:数据库是如何存储数据的. 数据库是如何存储数据的 来看一个小例子 scott ...