其他分享
首页 > 其他分享> > 【PAT (Basic Level) Practice】——【二分】1030 完美数列

【PAT (Basic Level) Practice】——【二分】1030 完美数列

作者:互联网

文章目录

一【题目难度】

二【题目编号】

三【题目描述】

四【题目示例】

五【解题思路】

六【最终得分】

七【代码实现】

#include<stdio.h>
#include<stdlib.h>

int max_1030_PerfectSequence(int a,int b)
{
    return a > b ? a : b;
}

int cmp_1030_PerfectSequence(const void *a,const void *b)
{
    return *(int *)a > *(int *)b ? 1 : -1;
}

int binarySearch(int* nums,int i,int n,long long mp)
{
    if(nums[n-1] < mp)
    {
        return n;
    }
    int left = i + 1;
    int right = n - 1;
    while(left < right)
    {
        int mid = (left +right) / 2;
        if(nums[mid] <= mp)
        {
            left = mid + 1;
        }
        else
        {
            right = mid;
        }
    }
    return left;
}

int main()
{
    int n,p,res = 1;
    scanf("%d %d",&n,&p);
    int* nums = (int *)calloc(n,sizeof(int));
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&nums[i]);
    }
    qsort(nums,n,sizeof(int),cmp_1030_PerfectSequence);
    for(int i = 0;i<n;i++)
    {
        int index = binarySearch(nums,i,n,(long long)nums[i] * p);
        res = max_1030_PerfectSequence(res,index - i);
    }
    printf("%d",res);
    return 0;
}

八【提交结果】

在这里插入图片描述

标签:PAT,数列,nums,int,Practice,mp,题目,Level,1030
来源: https://blog.csdn.net/IronmanJay/article/details/122616238