7-2 三足鼎立 (25 分)

C++运用二分法

当三个国家中的任何两国实力之和都大于第三国的时候,这三个国家互相结盟就呈“三足鼎立”之势,这种状态是最稳定的。

现已知本国的实力值,又给出 n 个其他国家的实力值。我们需要从这 n 个国家中找 2 个结盟,以成三足鼎立。有多少种选择呢?

输入格式:

输入首先在第一行给出 2 个正整数 n(2≤n≤105)和 P(≤109),分别为其他国家的个数、以及本国的实力值。随后一行给出 n 个正整数,表示n 个其他国家的实力值。每个数值不超过 109,数字间以空格分隔。

输出格式:

在一行中输出本国结盟选择的个数。

输入样例:

7 30
42 16 2 51 92 27 35

结尾无空行

输出样例:

9

结尾无空行

样例解释:

能联合的另外 2 个国家的 9 种选择分别为:

{16, 27}, {16, 35}, {16, 42}, {27, 35}, {27, 42}, {27, 51}, {35, 42}, {35, 51}, {42, 51}。

这个问题其实本质上就是寻找符合条件的三角形的三条边,题中以及给了一条已知的边,让我们从一个数组中找到另外的两条边。

开始的时候,我想直接暴力破解,一个循环输入,再来一个嵌套循环遍历数组找出符合的其他两个国家,但是本题数据过大,运行会超时。

两个嵌套for循环遍历数组时间复杂度过高,所以采用一个for循环加上二分法查找会节省很多。嵌套循环中,for循环遍历,相当于先选择一条边,再用二分查找法(while循环)寻找另外一条边。

#include<iostream>
#include<algorithm>
using namespace std;
int a[100001];//在主函数外开大数组
bool cmp(int a,int b)//sort函数运用,用来从小到大排序
{return a>b;
}
int main()
{int n,p,flag=0,temp;long long int count=0;//注意找出来的数有可能会超过int cin>>n>>p;for(int i=0;i<n;i++){cin>>a[i];//输入 }sort(a,a+n,cmp);//快速排序 int left;int right;int mid;for(int i=0;i<n;i++){left=i+1;right=n-1;if(a[left]+p<=a[i]){continue;//快速判断,如果此时的第三边(此时的第三边是最大的)过小,那就不用继续了 }else{while(left<=right)//注意条件<= {mid=(left+right)/2;if(a[mid]+p>a[i]&&a[i]+a[mid]>p)//如果此时mid符合,则找mid左边的数 {temp=mid;left=mid+1;flag=1;}else if(a[mid]+a[i]<=p||a[mid]+p<=a[i])//如果此时mid不符合,则找mid右边的数 {right=mid-1;}}}if(flag==1){count+=temp-i;}flag=0;}printf("%lld\n",count);return 0;} 

7-2 三足鼎立 (25 分)相关推荐

  1. 7-8 三足鼎立 (25分)数学+二分搜索

    当三个国家中的任何两国实力之和都大于第三国的时候,这三个国家互相结盟就呈"三足鼎立"之势,这种状态是最稳定的. 现已知本国的实力值,又给出 n 个其他国家的实力值.我们需要从这 n ...

  2. 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...

  3. PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)

    7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...

  4. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  5. 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)

    1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...

  6. 【PAT (Advanced Level) Practice】1093 Count PAT‘s (25 分)

    1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...

  7. 【PAT (Advanced Level) Practice】1149 Dangerous Goods Packaging (25 分)

    1149 Dangerous Goods Packaging (25 分) When shipping goods with containers, we have to be careful not ...

  8. 7-29 修理牧场 (25 分)

    7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L ​i ​​ 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...

  9. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

最新文章

  1. Hadoop学习之路(三)Hadoop-2.7.5在CentOS-6.7上的编译
  2. @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别
  3. 在linux系统里安装软件,如何使用Homebrew在Linux和Windows上安装软件
  4. Java后台返回和处理JSon数据的方法
  5. java 基础面试 英文_[Java面试] 面试java基础总结大全
  6. 复旦大学计算机学院博士生王斌,复旦大学计算机科学技术学院博士生刘鹏飞荣获...
  7. java基础—面向对象——变量的区别
  8. 13_python基础—函数进阶(参数、返回值、递归)
  9. 从零开始学前端:grid布局和音频 --- 今天你学习了吗?(CSS:Day24)
  10. Pascal基础(四)-常用函数和标准库
  11. matlab 噪声协方差矩阵,已知各个通道的信号的协方差矩阵(covariance matrix), 模拟各个通道的噪声信号...
  12. 网上图书商城项目学习笔记-022易宝支付
  13. 03_CSS字符属性
  14. 【附源码】Java计算机毕业设计安卓高速铁路配餐app论文(程序+LW+部署)
  15. 【例子】固定表格的首行与首列
  16. 心态很容易受别人影响_太容易被别人影响,我上辈子可能是个“复印机”
  17. 耳机断线了怎么修 耳机头部断线了如何修4线修复的方法
  18. Maven assembly打包文件被覆盖问题
  19. webpack代理 host文件 微信小程序公众号开发必配
  20. Behance上值得借鉴的设计风格

热门文章

  1. 电脑推荐-暂时就写这么多
  2. 人脸识别系统——Dlib人脸检测
  3. 【Transformer】一文搞懂Transformer | CV领域中Transformer应用
  4. 测试项目经理推荐的Java 并发测试神器
  5. 值得2019年创业的互联网项目 小程序创业月入10万不是梦
  6. 立体仓库 堆垛机 输送机 智能物流 wcs在和客户的wms进行对接,是典型的智能仓库的案例
  7. 利用阿里云公共配音接口快速配音
  8. PHP在线ps照片图片处理网站源码 photoshop网页版
  9. pythontcl协议_OTcl与C++,NS2是如何识别并调用执行协议的 转自百思论坛
  10. IP-guard 双机热备使用说明