虽然是自己打的python版代码,但是关键步骤还是参考了这位大佬的博客,就算作转载吧。
使用Python写二分代码仍然超时。
下面贴上python 3 AC代码。
n,p = [ int(x) for x in input().split() ]
d = [ int(x) for x in input().split() ]
d.sort();
j = 0;
maxn = 0;
for i in range(n):
count = 0;
#下面是优化的关键步骤,因为求取最大值,所以可以从i+maxn处开始检查
#由于i逐渐增加,maxn不减少,所以j不会重复遍历两次相同的位置。
#可以看做是线性移动的,总的时间复杂度为O(n)
for j in range(i + maxn,n):
if d[j] > p * d[i]:
break;
count = j-i+1;
maxn = max(maxn,count)
print(maxn)