• PAT 完美数列


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

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

    输入格式:

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

    输出格式:

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

    输入样例:

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

    输出样例:

    8
    #二分法查询列表中第一个大于mp的数的位置,再 -1 就是最大的小于等于mp的数位置
    def upper_boun(l,h,mp,c):
        while l <= h:
            mid=l+(h-l)//2
            if c[mid]<= mp:
                l=mid+1
            else:
                h=mid-1
        return l
    a,b=map(int,input().split())
    c=list(map(int,input().split()))
    c.sort()    #升序
    ma=0
    for i in range(len(c)):
        k=upper_boun(i,len(c)-1,c[i]*b,c)
        ma=max(ma,k-i)
    print(ma)

    二分法,没毛病

  • 相关阅读:
    Delphi Help
    RAD 10 新控件 TSearchBox TSplitView
    滚动条
    c++builder Active Form
    chart左侧
    RAD 10 蓝牙
    浏览器插件 火狐插件
    c++builder delphi 调用dll dll编写
    模拟键盘 键盘虚拟代码
    oracle怎么把一个用户下的表复制给另一个用户?(授予表权限)
  • 原文地址:https://www.cnblogs.com/andrew3/p/12702643.html
Copyright © 2020-2023  润新知