PAT乙级 (二分) 1030.完美数列

简介: PAT乙级 (二分) 1030.完美数列

给定一个正整数数列,和正整数 p,设这个数列中的最大值是 M,最小值是 m,如果 M≤mp,则称这个数列是完美数列。

现在给定参数 p 和一些正整数,请你从中选择尽可能多的数构成一个完美数列。

输入格式:

输入第一行给出两个正整数 N 和 p,其中 N(≤105)是输入的正整数的个数,p(≤109)是给定的参数。第二行给出 N 个正整数,每个数不超过 109。

输出格式:

在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。

输入样例:

10 8
2 3 20 4 5 1 6 7 8 9

输出样例:

8

代码:

#include<iostream>
#include<algorithm>
using namespace std;
//定位M
int locateMax(int* arr, int count, int i, long long x){
    //判断x是否大于最大值
    if (arr[count - 1] <= x) return count;
    int low = i - 1, high = count - 1, mid;
    //二分查找
    while(low < high){
        mid = (high + low) / 2;
        if (arr[mid] > x) high = mid - 1;
        else low = mid + 1;
    }
    return low;
}
int main(){
    int count, number[100010] = { 0 }, res = 1;
    //参数需要用long long,否则测试点5过不去
    long long p;
    cin >> count >> p;
    for (int i = 0; i < count; i++){
        cin >> number[i];
    }
    //给数组排序
    sort(number, number + count);
    //得到满足条件的最大数组长度
    for (int i = 0; i < count; i++){
        int j = locateMax(number, count, i, number[i] * p);
        res = max(res, j - i);
    }
    cout << res;
    return 0;
}


相关文章
|
6天前
|
算法 Java
LeetCode寻找两个有序数组的中位数打败100%人
LeetCode寻找两个有序数组的中位数打败100%人
30 0
|
8月前
|
人工智能
【动态规划刷题 11】等差数列划分&& 最长湍流子数组
【动态规划刷题 11】等差数列划分&& 最长湍流子数组
|
8月前
【动态规划刷题 16】最长等差数列 (有难度) && 等差数列划分 II - 子序列
【动态规划刷题 16】最长等差数列 (有难度) && 等差数列划分 II - 子序列
|
7月前
|
算法
趣味算法-神奇的兔子数列
趣味算法-神奇的兔子数列
|
12月前
|
算法
【leedcode】0004. 两个有序数组的中位数
【leedcode】0004. 两个有序数组的中位数
60 0
子数组问题总结(很多子数组求法类似,暴力求法)
子数组问题总结(很多子数组求法类似,暴力求法)
子数组问题总结(很多子数组求法类似,暴力求法)
|
存储 算法 索引
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
102 0
【每日挠头算法题】LeetCode 1337. 矩阵中战斗力最弱的 K 行 —— 二分 + 排序 / 堆
|
测试技术
PAT乙级 (贪心) 1023、1020
PAT乙级 (贪心) 1023、1020
59 0
|
人工智能 移动开发 API
[Luogu] P1438 无聊的数列 | 线段树简单题
题目背景 无聊的 YYB 总喜欢搞出一些正常人无法搞出的东西。有一天,无聊的 YYB 想出了一道无聊的题:无聊的数列。。。
118 0
|
人工智能 BI
斐波那契II--规律/二分
小C养了一些很可爱的兔子。 有一天,小C突然发现兔子们都是严格按照伟大的数学家 斐波那契 提出的模型来进行繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子。我们假定,在整个过程中兔子不会出现任何意外。 小C把兔子按出生顺序,把兔子们从1开始标号,并且小C的兔子都是1号兔子和1号兔子的后代。如果某两对兔子是同时出生的,那么小C会将父母标号更小的一对优先标号。如果我们把这种关系用图画下来,前六个月大概就是这样的:
169 0
斐波那契II--规律/二分