给定一个正整数数列,和正整数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

程序代码:

#include<stdio.h>
#include<stdlib.h>
#define MAX 100000
long long num[MAX];
void sort(long long n[],int len);
void quicksort(long long r[],int start,int end);
int comp(const void* a,const void* b)
{
    if(*(long long*)a<*(long long*)b)   return -1;
    if(*(long long*)a==*(long long*)b)      return 0;
    if(*(long long*)a>*(long long*)b)       return 1;
}
int main()
{
    int N,i,j;
    long long p;
    long long sum ;
    long long m;
    int max = 0;
    int count=0;
    scanf("%d%lld",&N,&p);
    for(i=0;i<N;i++)
        scanf("%lld",&num[i]);
    qsort(num,N,sizeof(long long),comp);
    for(i=0;i<N;i++)
    {
        sum = num[i]*p;
        for(j=i+count;j<N;j++)
        {
            if(num[j]<=sum)
            {
                count =j-i+1;
            }
            else
                break;
        }
        if(count > max)
            max = count;
    }
    printf("%d",max);
    return 0;
}
void sort(long long n[],int len)
{
    int i,j;
    long long tmp;
    for(i=len-1;i>0;i--)
        for(j=0;j<i;j++)
        {
            if(n[j]>n[j+1])
            {
                tmp = n[j];
                n[j]=n[j+1];
                n[j+1]=tmp;
            }
        }   
}
void quicksort(long long r[],int start,int end)
{
    int i=start;
    int j=end;  
    long long temp=r[start];
    if(i<j)
    {
        while(i!=j)
        {
            while(i<j&&r[j]>=temp)
                j--;        
            if(i<j)
            {

                r[i]=r[j];
                i++;
            }       
            while(i<j&&r[i]<temp)
                i++;        
            if(i<j)
            {
                r[j]=r[i];
                j--;
            }   
        }   
        r[i]=temp;  
        quicksort(r,start,i-1);
        quicksort(r,i+1,end);
    }           
}