二分法解决:
二分法的题有的时候真的很迷...
起初最后一个测试点总也过不去,加了一行之后就成功了~
至于为什么加那一行我也不清楚了...
#include <algorithm>
#include <iostream>
#include <vector>
typedef long long LL;
using namespace std;
int BinarySearch(const LL* array,int target,int i,int j){
while (i<=j){
int mid=(i+j)/2;
if(array[mid]==target){
return mid;
} else if(array[mid]>target){
j=mid-1;
} else{
i=mid+1;
}
}
return j;//返回正好小于等于的那个下标
}
int main() {
LL N,p;
cin>>N>>p;
LL array[N];
for (int i = 0; i < N; ++i) {
scanf("%lld",&array[i]);
}
sort(array,array+N);
LL maxLen=0;
for (LL i = 0; i < N; ++i) {
LL target=array[i]*p;
LL index=BinarySearch(array,target,i,N-1);
if(index>=N||index<i){
maxLen=max(N-i,maxLen);
continue;
}
maxLen=max(index-i+1,maxLen);
}
cout<<maxLen<<endl;
return 0;
}