题目传送门
之前一直测试点4超时,搁置了很久,今天重新写,for和while有时候使用真的有差距,如果按我注释的那个代码就是过不了的,因为while里面只有条件为真才会执行下面的东西,但是for循环是按次数遍历的,可能时间就差在这里,然后就超时了。
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int N,i,j,k;
long long p;
long long a[100010];
int main()
{
while(~scanf("%d %lld",&N,&p)){
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
sort(a,a+N);
int max_an=0;
int an=0;
int end=0;
for(i=0;i<N;i++){
if(N-an<=i) break;
/* for(j=max_an+i;j<N;j++){
if(a[i]*p>=a[j]){
max_an++;
//printf("%d\n",end);
}
else break;
}
if(an<max_an)an=max_an;
max_an=0;*/
while(a[end]<=a[i]*p){
++end;
if(end==N) break;
}
if(an<end-i)an=end-i;
max_an=0;
}
printf("%d\n",an);
}
return 0;
}