给定⼀个正整数数列,和正整数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
分析
先将数组排序,min为num[0],max为num[n-1],从后向前查看,知道max<=pmin为止,如样例1 2 3 4 5 6 7 8 9 20,p=8,开始i=n-1,即max从20开始,20>p1,则i--,直到i=7,此时满足max=8<=p*1.感觉思路没有错,不知道为什么还有三个样例没通过。
代码
//此代码样例156不能通过
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n,p;
cin>>n>>p;
int num[n];
for(int i=0;i<n;i++){
cin>>num[i];
}
sort(num,num+n);
int i=n-1;
while(num[i]>p*num[0]){
i--;
}
cout<<i+1;
return 0;
}