当前位置: 首页 > news >正文

PAT甲级-1085 Perfect Sequence

题目

 

题目大意

在一组数中找到一个完美数列,满足M <= mp,M是该数列的最大值,m是最小值,p是题目给定的一个常数。

思路

模拟或者二分法。二分法可用upper_bound()函数实现。

知识点

upper_bound() 和 lower_bound() 函数在<algorithm>头文件中,一般有四种方式。

upper_bound(v.begin(), v.end(), value) 用于从小到大排列的数组,函数返回第一个>value的数的迭代器(地址)。

lower_bound(v.begin(), v.end(), value) 用于从小到大排列的数组,函数返回第一个>=value的数的迭代器(地址)。

upper_bound(v.begin(), v.end(), value, greater<int>()) 用于从大到小排列的数组,函数返回第一个<value的数的迭代器(地址)。

lower_bound(v.begin(), v.end(), value, greater<int>()) 用于从大到小排列的数组,函数返回第一个<=value的数的迭代器(地址)。

代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main(){long long n, p;cin >> n >> p;vector<long long> v(n);for (long long i = 0; i < n; i++){cin >> v[i];}sort(v.begin(), v.end());long long res = 0; // 最大距离for (int i = 0; i < n; i++){// 找到满足 v[j] <= v[i] * p 的最大 jauto it = upper_bound(v.begin(), v.end(), v[i] * p);res = max(res, (long long)(it - v.begin() - i));  // 强制转换为long long}cout << res << endl;return 0;
}
/*  当使用 upper_bound 返回第一个大于 v[i] * p 的位置后,前面的所有元素都会自动满足 <= v[i] * p,因为数组是升序排序的。这意味着从 v[i] 开始直到 upper_bound 返回的位置的所有元素,都是满足条件的。
*/


http://www.mrgr.cn/news/22161.html

相关文章:

  • Linux下的PWM驱动
  • C++万字解析类和对象(上)
  • 面试真题 | 记录一次面试真题
  • 「iOS学习」——Masonry学习
  • 如何解决缓存(redis)和数据库(MySQL)数据不一致的问题?
  • 衡石分析平台使用手册-快速入门
  • 长短期记忆神经网络-LSTM回归预测-MATLAB代码实现
  • 一名优秀的工程师应该学会在工作中提升自己,面试篇
  • matlab读取NC文件(含group)
  • vulhub远程执行命令漏洞CVE-2022-22963
  • SprinBoot+Vue校园数字化图书馆系统的设计与实现
  • Vulhub Apache Airflow (CVE-2020-11978)
  • QML入门之创建可重用的组件(一)
  • 828华为云征文|Flexus X实例C#/.Net Core 结合(git代码管理、docker自定义镜像)快速发布部署-让你的项目飞起来~
  • 【微前端记录】微前端qiankun初体验
  • 面试字节视觉大模型算法岗,太难了。。。
  • Linux在桌面上创建软件启动快捷方式
  • systemverilog如何用一行code输出两个队列在可变范围内的对比结果
  • 【大数据算法】一文掌握大数据算法之:空间亚线性算法。
  • vulhub GhostScript 沙箱绕过(CVE-2018-16509)