7-2 三足鼎立 (25 分)
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 分)相关推荐
- 7-8 三足鼎立 (25分)数学+二分搜索
当三个国家中的任何两国实力之和都大于第三国的时候,这三个国家互相结盟就呈"三足鼎立"之势,这种状态是最稳定的. 现已知本国的实力值,又给出 n 个其他国家的实力值.我们需要从这 n ...
- 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- 【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 ...
- 【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 ...
- 【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 ...
- 7-29 修理牧场 (25 分)
7-29 修理牧场 (25 分) 农夫要修理牧场的一段栅栏,他测量了栅栏,发现需要N块木头,每块木头长度为整数L i 个长度单位,于是他购买了一条很长的.能锯成N块的木头,即该木头的长度是L ...
- 7-18 银行业务队列简单模拟 (25 分)
7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
最新文章
- Hadoop学习之路(三)Hadoop-2.7.5在CentOS-6.7上的编译
- @@identity、scope_identity()、IDENT_CURRENT('tablename')函数的区别
- 在linux系统里安装软件,如何使用Homebrew在Linux和Windows上安装软件
- Java后台返回和处理JSon数据的方法
- java 基础面试 英文_[Java面试] 面试java基础总结大全
- 复旦大学计算机学院博士生王斌,复旦大学计算机科学技术学院博士生刘鹏飞荣获...
- java基础—面向对象——变量的区别
- 13_python基础—函数进阶(参数、返回值、递归)
- 从零开始学前端:grid布局和音频 --- 今天你学习了吗?(CSS:Day24)
- Pascal基础(四)-常用函数和标准库
- matlab 噪声协方差矩阵,已知各个通道的信号的协方差矩阵(covariance matrix), 模拟各个通道的噪声信号...
- 网上图书商城项目学习笔记-022易宝支付
- 03_CSS字符属性
- 【附源码】Java计算机毕业设计安卓高速铁路配餐app论文(程序+LW+部署)
- 【例子】固定表格的首行与首列
- 心态很容易受别人影响_太容易被别人影响,我上辈子可能是个“复印机”
- 耳机断线了怎么修 耳机头部断线了如何修4线修复的方法
- Maven assembly打包文件被覆盖问题
- webpack代理 host文件 微信小程序公众号开发必配
- Behance上值得借鉴的设计风格
热门文章
- 电脑推荐-暂时就写这么多
- 人脸识别系统——Dlib人脸检测
- 【Transformer】一文搞懂Transformer | CV领域中Transformer应用
- 测试项目经理推荐的Java 并发测试神器
- 值得2019年创业的互联网项目 小程序创业月入10万不是梦
- 立体仓库 堆垛机 输送机 智能物流 wcs在和客户的wms进行对接,是典型的智能仓库的案例
- 利用阿里云公共配音接口快速配音
- PHP在线ps照片图片处理网站源码 photoshop网页版
- pythontcl协议_OTcl与C++,NS2是如何识别并调用执行协议的 转自百思论坛
- IP-guard 双机热备使用说明