PTA 三足鼎立 (lower_bound()+upper_bound())

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

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

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

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

输入样例:
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}。

知识引入
AC本道题需要用到C++ STL中的lower_bound()和upper_bound()函数。
lower_bound(type a[ ], type* p1, type* p2)
能够查找第一个大于等于当前数字的地址

upper_bound(type a[ ], type* p1, type* p2)
能够查找第一个大于(没有等于)当前数字的地址

思路
根据题目定义可知任意两个国家的实力值要大于第三个。如果直接双循环搜索,必然超时(不过用来骗分不错)
让我们想想,假如把各个国家的实力值进行排序,依次遍历数组,如果要满足当前的实力值和题目给定的实力值三足鼎立,那么第三个国家的实力值的范围可以确定下来的。
我们不妨这样想,设当前实力值加上输入给定的实力值为temp1,当前实力值减去输入给定的实力值的绝对值为temp2,在当前位置后找第一个大于等于temp的数和第一个大于temp2的数。当前遍历的国家可以和两个位置数之间的国家形成联盟,每次遍历总数加上两数之差,最后输出总是即可。

参考代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int num[100005];int main()
{int n, p;scanf("%d %d", &n, &p);ll sum = 0;for(int i = 1; i <= n; i++)scanf("%d", &num[i]);sort(num+1, num+n+1);int k, q;for(int i  = 1; i <= n; i++){q = lower_bound(num+i+1, num+n+1, p+num[i]) - (num+1);k = upper_bound(num+i+1, num+n+1, abs(num[i]-p)) - (num+1);sum += q-k;}printf("%ld\n", sum);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用.NET解索尼相机ARW格式照片

用.NET解索尼相机ARW格式照片目前常用的照片格式是 .jpg&#xff0c;它只能提供 8bit的色彩深度&#xff0c;而目前主流的相机都能提供高达 12bit- 14bit的色彩深度&#xff0c;动态范围和后期处理能力也大大增加&#xff0c;这也是为什么不少摄影爱好者会优先使用相机提供原始…

天梯赛 喊山 bfs

喊山&#xff0c;是人双手围在嘴边成喇叭状&#xff0c;对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤。呼唤声通过空气的传递&#xff0c;回荡于深谷之间&#xff0c;传送到人们耳中&#xff0c;发出约定俗成的“讯号”&#xff0c;达到声讯传递交流的目的。原来它是彝族先…

ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 1

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。关于HelmWhy Helm&#xff1f;虽然K8S能够很好地组织和编排容器&#xff0c;但是缺少一个更高层次的应用打包工具&#xff0c;而Helm就是专门干这个事的。通过Helm能够…

520 钻石争霸赛 7-8浪漫侧影(二叉树的遍历)

“侧影”就是从左侧或者右侧去观察物体所看到的内容。例如上图中男生的侧影是从他右侧看过去的样子&#xff0c;叫“右视图”&#xff1b;女生的侧影是从她左侧看过去的样子&#xff0c;叫“左视图”。 520 这个日子还在打比赛的你&#xff0c;也就抱着一棵二叉树左看看右看看…

依赖注入在 dotnet core 中实现与使用:2 使用 Extensions DependencyInjection

既然是依赖注入容器&#xff0c;必然会涉及到服务的注册&#xff0c;获取服务实例&#xff0c;管理作用域&#xff0c;服务注入这四个方面。服务注册涉及如何将我们的定义的服务注册到容器中。这通常是实际开发中使用容器的第一步&#xff0c;而容器本身通常是由框架来实例化的…

520 钻石争霸赛 7-6 矩阵列平移(循环)

给定一个 nn 的整数矩阵。对任一给定的正整数 k<n&#xff0c;我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置&#xff0c;平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。 输入格式&#xff1a; 输入第一行给出 3 个…

拿 C# 搞函数式编程 - 2

前一阵子在写 CPU&#xff0c;导致一直没有什么时间去做其他的事情&#xff0c;现在好不容易做完闲下来了&#xff0c;我又可以水文章了哈哈哈哈哈。有关 FP 的类型部分我打算放到明年再讲&#xff0c;因为现有的 C# 虽然有一个 pattern matching expressions&#xff0c;但是没…

520 钻石争霸赛 7-5 大勾股定理 (数学)

基本思路&#xff1a; 这道题暴力拿到14分并不难&#xff0c;根据题意模拟即可&#xff0c;具体代码在下面。 至于最后一个测试点超时的问题&#xff0c;现已解决&#xff0c;AC代码在第二部分哦~ 参考代码&#xff08;14分&#xff09;&#xff1a; #include<bits/stdc.h…

.NETer,如何用.NET Core 3.0武装自己?这样学效率提高10倍!

都2020了 你还不会.NET Core&#xff1f; 2019年&#xff0c;.NET Core 3.0横空出世&#xff0c;越来越多的开发者开始关注.NET Core&#xff0c;越来越多的互联网软件公司开始使用.NET Core&#xff0c;各大.NET招聘岗位要求中&#xff0c;也将.NET Core列为必备技能&#xff…

DataFrame的多dtype创建方法

在创建DataFrame的时候&#xff0c;只有有一个dtype类型。 若使用numpy数组的字典&#xff0c;就可以分别设置dtype类型了。 import numpy as np import pandas as pddata {Site:np.array([Google, Runoob, Wiki],dtypestr),Age:np.array([10, 12, 13], dtypefloat),Year:np.…

ASP.NET Core on K8S深入学习(10)K8S包管理器Helm-Part 2

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff0c;可以点击查看更多容器化技术相关系列文章。上一篇 Part 1 中介绍了Helm的基本概念与基本使用&#xff0c;这一篇我们来自定义一个Chart玩玩。自定义一个Chart1 创建Chart首先&#xff0c;通过以下命令创建一个c…

使用Vistual Studio N年,推荐2个异常捕获的技巧

点击上方“dotNET全栈开发”&#xff0c;“设为星标”加“星标★”&#xff0c;每天11.50&#xff0c;好文必达全文约1600字&#xff0c;预计阅读时间3分钟这个n到底是多少年&#xff1f;宇宙第一开发IDE Visual Studio的调试功能非常强大&#xff0c;平常工作debug帮助我们解决…

LeetCode动态规划 斐波那契数

斐波那契数&#xff0c;通常用 F(n) 表示&#xff0c;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 n > 1 给你 n &a…

Magicodes.Sms短信库的封装和集成

简介Magicodes.Sms是心莱团队封装的短信服务库&#xff0c;已提供Abp模块的封装。Nuget新的包开始使用如果使用Abp相关模块&#xff0c;则使用起来比较简单&#xff0c;具体您可以参考相关单元测试的编写。主要有以下步骤&#xff1a;1.引用对应的Nuget包如&#xff1a;2.添加模…

LeetCode动态规划 使用最小花费爬楼梯

数组的每个下标作为一个阶梯&#xff0c;第 i 个阶梯对应着一个非负数的体力花费值 cost[i]&#xff08;下标从 0 开始&#xff09;。 每当你爬上一个阶梯你都要花费对应的体力值&#xff0c;一旦支付了相应的体力值&#xff0c;你就可以选择向上爬一个阶梯或者爬两个阶梯。 请…

Magicodes.IE编写多框架版本支持和执行单元测试

背景很多情况下&#xff0c;我们编写了一些工具库之后&#xff0c;往往在某些框架版本中会出现一些问题&#xff0c;比如本人最近写的一个导入导出的工具库Magicodes.IE就出现了以下问题&#xff1a;&#xff08;GitHub&#xff1a;https://github.com/xin-lai/Magicodes.IE&am…

2019全球AI训练营五地再同发

不觉已过小大寒&#xff0c;虽然天气渐冷&#xff0c;但我们学习的热情却愈加高涨。因为由MVP发起主办的、2019年的全球AI训练营又要在北京、上海、广州、杭州、宁波五个地方同时举办了&#xff01;去年取得巨大成功的全球活动&#xff0c;今年参与举办的国家地区/城市更是高达…

NLog自定义Layout Renderer

更多精彩内容请关注我们长话短说前文《解剖HttpClientFactory&#xff0c;自由扩展HttpMessageHandler》主要讲如何为HttpClientFactory自定义HttpMessageHandler组件, 现在完成课后的小作业&#xff1a; 将重点日志字段显示到Nlog的Layout Renderer上本文自定义一个NLog Layo…

LeetCode动态规划 跳跃游戏II

给你一个非负整数数组 nums &#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。 这道题用动态规划做&#xff0c;时间复杂度很高 …

一文了解Nuget的使用

Nuget介绍官网定义&#xff1a;NuGet是.NET的软件包管理器&#xff08;免费&#xff09;。NuGet客户端工具提供了生成和使用软件包的能力。NuGet Gallery 是所有软件包作者和消费者都使用的中央软件包存储库。简单来说&#xff0c;nuget包解决了dll引用的问题&#xff0c;开发者…