PAT甲级 1085 Perfect Sequence 二分和双指针(Two Pointers)

2024-06-19 16:32

本文主要是介绍PAT甲级 1085 Perfect Sequence 二分和双指针(Two Pointers),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

二分写法

#include <bits/stdc++.h>
using namespace std;
int find_upper_bound(const vector<long long>& nums, long long x)
{int beg = 0, end = nums.size(), mid = beg + (end - beg) / 2;while (beg < end) {mid = beg + (end - beg) / 2;if (nums[mid] <= x) {  // 第一个大于x的数一定在mid后面beg = mid + 1;}else {end = mid;  // 第一个大于x的数在mid之前(含mid)}}return end;  // 结束时有end=beg
}int main()
{
#ifdef LOCALfreopen("input.txt", "r", stdin);
#endifint N;long long p;cin >> N >> p;vector<long long> nums(N);for (int i = 0; i < N; ++i) {cin >> nums[i];}sort(nums.begin(), nums.end());int max_contain = -1;for (int i = 0; i < N; ++i) {long long x = nums[i] * p;int idx     = find_upper_bound(nums, x);max_contain = std::max(max_contain, idx - i);}cout << max_contain;
}

双指针(Two Pointers)

#include <bits/stdc++.h>
using namespace std;
int main()
{
#ifdef LOCALfreopen("input.txt", "r", stdin);
#endifint n;long long p;cin >> n >> p;vector<long long> nums(n);for (auto& i : nums) cin >> i;sort(nums.begin(), nums.end());// i和j起点为0,i指示最小数字,j指示最大数字int i = 0, j = 0, ans = -1;while (j < n) {long long tmp = nums[i] * p;while (j < n && nums[j] <= tmp) ++j;ans = max(ans, j - i);++i;}cout << ans;
}

这篇关于PAT甲级 1085 Perfect Sequence 二分和双指针(Two Pointers)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1075548

相关文章

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

hdu2241(二分+合并数组)

题意:判断是否存在a+b+c = x,a,b,c分别属于集合A,B,C 如果用暴力会超时,所以这里用到了数组合并,将b,c数组合并成d,d数组存的是b,c数组元素的和,然后对d数组进行二分就可以了 代码如下(附注释): #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<que

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

poj 3104 二分答案

题意: n件湿度为num的衣服,每秒钟自己可以蒸发掉1个湿度。 然而如果使用了暖炉,每秒可以烧掉k个湿度,但不计算蒸发了。 现在问这么多的衣服,怎么烧事件最短。 解析: 二分答案咯。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <c

poj 3258 二分最小值最大

题意: 有一些石头排成一条线,第一个和最后一个不能去掉。 其余的共可以去掉m块,要使去掉后石头间距的最小值最大。 解析: 二分石头,最小值最大。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <c