N,q=map(int,input().split()) l=list(map(int,input().split())) l.sort() m=0 for i in range(N): next_index=m+i if next_index>=N: break for j in range(next_index,N): if l[j]<=l[i]*q: m+=1 else: break print(m)
解释下第6行next_index值的设定,m为前一个最小值可以构成完美数列的个数,当遍历到数列后一个最小值时,直接将最大值L[j]设定为与当前最小值间隔为m的数列中的值;若next_index>=数列个数时,即使满足最小值*q>=M,完美数列最大个数也只能等于之前所得的m,因此构成完美数列的最大值为m
一开始看题后,不假思索(没动脑子的结果)导致运行超时,只能另觅它法
n,p=map(int,input().split()) num=list(map(int,input().split())) M=max(num);m=min(num) for i in range(n): if m*p<M: num.remove(m) m=min(num) else: break print(len(num))