题目
pata1085
题目思路
本题首先对数组进行排序,然后从大到小遍历a,求解数组中大于等于a[j]/p的第一个元素,求得以该元素为最大元素的数组元素最大值。
参考代码
#include<iostream>
#include<algorithm>
using namespace std;
int find(int low,int high,int a[],float k);
int main()
{
int n=0,p=0,k=0,max=-1;
float f=0;
cin>>n>>p;
int a[n];
for(int i=0;i<n;i++)
scanf("%d",a+i);
sort(a,a+n);
for(int j=n-1;j>=0;j--)
{
f=(float)(a[j])/p;
k=find(0,n-1,a,f);
if(j-k+1>max)
max=j-k+1;
if(j<=max)
break;
}
printf("%d",max);
return 0;
}
int find(int low,int high,int a[],float k)
{
int mid = (low+high)/2;
while(low<high)
{
mid = (low+high)/2;
if(a[mid]<k)
low=mid+1;
else if(a[mid]>=k)
high=mid;
}
return low;
}