基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
 收藏
 关注
给出一个长度为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. 【分析】:直接枚举两个数,二分查找第三个数就行了。由于题中要求按数的大小排序输出,所以直接sort升序输出即可,这样即可用二分查找第三个数,即-a[i]-a[j],并且一定比a[i]和a[j]大,复杂度为n^2log(n);
  1. 【代码】:
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int maxn = +;
  6. int n;
  7. int a[maxn];
  8.  
  9. int check(int x)
  10. {
  11. int l=,r=n-;
  12. while(l<=r)
  13. {
  14. int mid=(l+r)>>;
  15. if(a[mid]==x)
  16. return ;
  17. if(a[mid]<x)
  18. l=mid+;
  19. else
  20. r=mid-;
  21. }
  22. return ;
  23.  
  24. }
  25. int main()
  26. {
  27. int ans;
  28. int flag=;
  29.  
  30. cin>>n;
  31. for(int i=;i<n;i++)
  32. cin>>a[i];
  33. sort(a,a+n);
  34. for(int i=;i<n;i++)
  35. {
  36. for(int j=i+;j<n;j++)
  37. {
  38. int ans=-a[i]-a[j];
  39. if(ans<=a[j])
  40. break;
  41. if(check(ans))
  42. {
  43. cout<<a[i]<<" "<<a[j]<<" "<<ans<<endl;
  44. flag=;
  45. }
  46.  
  47. }
  48. }
  49. if(!flag)
  50. cout<<"No Solution"<<endl;
  51. return ;
  52. }

二分

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int maxn = +;
  5. int main()
  6. {
  7. int n;
  8. int flag=;
  9. int a[maxn];
  10. cin>>n;
  11. for(int i=;i<n;i++)
  12. cin>>a[i];
  13. sort(a,a+n);
  14. for(int i=;i<n;i++)
  15. {
  16. for(int j=i+;j<n;j++)
  17. {
  18. if(a[i]+a[j]<=)
  19. {
  20. for(int k=j+;k<n;k++)
  21. {
  22. if(a[i]+a[j]+a[k]==)
  23. {
  24. cout<<a[i]<<" "<<a[j]<<" "<<a[k]<<endl;
  25. flag=;
  26. }
  27. }
  28. }
  29. }
  30. }
  31. if(flag)
  32. cout<<"No Solution"<<endl;
  33. return ;
  34. }

暴力枚举+剪枝

51nod 1090 3个数和为0【二分】的更多相关文章

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

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

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

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

  3. [51nod] 1090 3个数和为0 暴力+二分

    给出一个长度为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 1267 4个数和为0

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

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

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

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

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

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

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

随机推荐

  1. Android通过用代码画虚线椭圆边框背景来学习一下shape的用法

    在Android程序开发中,我们经常会去用到Shape这个东西去定义各种各样的形状,shape可以绘制矩形环形以及椭圆,所以只需要用椭圆即可,在使用的时候将控件比如imageview或textview ...

  2. webstrom11 vue插件配置

    直接上图 1. 安装vue插件 2.添加模板 3.指定模板类型 最新的是插件 是 vue.js 创建完 Vue File 文件后 需要在 下面这里关联一下

  3. 关于mysqldump备份非事务表的注意事项

      Preface       We're used to get a logical backup set(whole instance) by simply specifying "-- ...

  4. 解决Navicat for MySQL 连接 Mysql 8.0.11 出现1251- Client does not support authentication protocol 错误

    安装MySQL8.0之后,使用Navicat连接数据库,报1251错误. 上网搜索解决方案,网上说出现这种情况的原因是:mysql8 之前的版本中加密规则是mysql_native_password, ...

  5. 孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数

    孤荷凌寒自学python第四十七天通用跨数据库同一数据库中复制数据表函数 (完整学习过程屏幕记录视频地址在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 今天打算完成的是通用的(至少目 ...

  6. 孤荷凌寒自学python第九天Python的输出print的格式化

    孤荷凌寒自学python第九天Python的输出print的格式化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (今天感觉手写笔记整得清楚些,汇总电子 笔记时,自己思路凌乱了,练习过程也还 ...

  7. hadoop-hdfs(三)

    HDFS概念 1 数据块* HDFS的一个数据块默认是64M,与元数据分开管理. 优点: 数据块的大小设计的较大,所以寻址占传输的时间比例较小,只需要计算传输速度即可. 便于简化管理,利于计算剩余空间 ...

  8. java连接Oracle数据库实现增删改查并在Navicat中显示

    创建TEST表 eclipse中的java项目 代码 数据库方法类 DBUtil: package util; import java.sql.Connection; import java.sql. ...

  9. c++ object model

    对一个结构体进行不断的封装后可以形成一个c++类,为此需要添加很多函数成员之类的代码,为此显示c++比c语言显得庞大并且迟缓,但是事实并不是这些 c++在布局和时间上的额外承担主要是由virtual引 ...

  10. Codeforces Round #388 (Div. 2) 749E(巧妙的概率dp思想)

    题目大意 给定一个1到n的排列,然后随机选取一个区间,让这个区间内的数随机改变顺序,问这样的一次操作后,该排列的逆序数的期望是多少 首先,一个随机的长度为len的排列的逆序数是(len)*(len-1 ...