给出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
思路:
二分
第一次是枚举前两个数,后面两个数二分
第二次做法是,先统计出两个不同数的和的数组,然后直接二分

思路一:

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. typedef long long ll;
  5. ll ans[];
  6. int main() {
  7. ios::sync_with_stdio(false);
  8. int n,flag=;
  9. cin>>n;
  10. for(int i=;i<n;++i) cin>>ans[i];
  11. sort(ans,ans+n);
  12. for(int i=;i<n;++i) {
  13. if(ans[i]>=) break;
  14. for(int j=i+;j<n;++j) {
  15. int l=j+,r=n-;
  16. while(j<r) {
  17. ll temp=ans[i]+ans[j]+ans[l]+ans[r];
  18. if(temp>) r--;
  19. else if(temp<) l++;
  20. else {
  21. flag=;
  22. cout<<"Yes"<<endl;
  23. return ;
  24. }
  25. }
  26. }
  27. }
  28. if(!flag) cout<<"No"<<endl;
  29. return ;
  30. }

思路二:

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. typedef long long ll;
  5. struct node {
  6. ll sum,x,y;
  7. node() {sum=x=y=;}
  8. };
  9. node bns[];
  10. ll ans[];
  11. bool cmp(const node &a, const node &b) {
  12. if(a.sum<b.sum) return true;
  13. if(a.sum>b.sum) return false;
  14. if(a.x<b.x) return true;
  15. if(a.x>b.x) return false;
  16. if(a.y<=b.y) return true;
  17. else return false;
  18. }
  19. int main() {
  20. ios::sync_with_stdio(false);
  21. int n,ins=;
  22. cin>>n;
  23. for(int i=;i<n;++i) cin>>ans[i];
  24. for(int i=;i<n;++i) {
  25. for(int j=i+;j<n;++j) {
  26. bns[ins].sum=ans[i]+ans[j];
  27. bns[ins].x=ans[i];
  28. bns[ins].y=ans[j];
  29. ins++;
  30. }
  31. }
  32. sort(bns,bns+ins,cmp);
  33. int l=,r=ins-,flag=;
  34. while(l<r) {
  35. ll temp=bns[l].sum+bns[r].sum;
  36. if(temp<) l++;
  37. else if(temp>) r--;
  38. else {
  39. if(bns[l].x!=bns[r].x&&bns[l].y!=bns[r].x&&bns[l].y!=bns[r].y) {
  40. cout<<"Yes"<<endl;
  41. flag=;
  42. return ;
  43. }
  44. l++;
  45. r--;
  46. }
  47. }
  48. if(!flag) cout<<"No"<<endl;
  49. return ;
  50. }

51Nod 1267 4个数和为0 二分的更多相关文章

  1. 51nod 1267 4个数和为0

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

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

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

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

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

  4. 51 nod 1267 4个数和为0

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 虚拟专用网VPN

    1. 三个专用地址块: (1)10.0.0.0到10.255.255.255 (2)172.16.0.0到172.31.255.255 (3)192.168.0.0到192.168.255.255 2 ...

  2. js 短信倒计时60s

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. octave中的一些基本操作

    1.矩阵的表示:v = [1 2 2]  %表示1行3列的矩阵 v = [1; 2; 2] %表示3行1列的矩阵 v = [1 2; 2 3; 4 5] %3*2矩阵 size(v) % 求v的行与列 ...

  4. 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )

    1.问题描述 给定一个字符串(序列),求该序列的最长的回文子序列. 2.分析 需要理解的几个概念: ---回文 ---子序列 ---子串 http://www.cnblogs.com/LCCRNblo ...

  5. VS2008中C#开发webservice简单实例

    1.创建工程 文件-> 新建->网站 如下图. 工程建好后,会自动添加如下代码: using System; using System.Linq; using System.Web; us ...

  6. Hadoop 中 最重要的两个模块

    Hadoop 中 最重要的两个模块 HDFS   分布式的文件系统 主节点: NameNode SecondaryNamenode ResourceManager 从节点: DataNode Node ...

  7. 0_Simple__matrixMulDrv

    使用CUDA的 Driver API 来计算矩阵乘法. ▶ 源代码: #include <stdio.h> #include <cuda.h> #include <bui ...

  8. MySQL数据库中文变问号

    原文参考:http://www.linuxidc.com/Linux/2017-05/144068.htm 系统是的Ubuntu  16,修改以下配置 1.sudo vi /etc/mysql/my. ...

  9. windows下 sbulime text 安装less2css踩的几个坑

    sublime 就不介绍了,less2css 是一个安装在sublime上的插件,可以让你书写less后自动生成css文件,而且还可以提示less的语法错误. 搜了一下相关的教程,很多都写的不全,按照 ...

  10. Unity中的Mono & Linux上编译Mono的流程

    前段时间编译了一下Unity的Mono,看了很多相关的文章,也遇到很多新坑.所以来总结一下,加深自己对Mono的理解 为什么Unity可以跨平台运行呢 通常Unity的脚本有C#.JS.Boo.不过现 ...