在我自己开始写的代码中,测试点4老是运行超时,可能是在数据量比较大的时候,运行速度达不到要求,因此,在网上寻找答案,发现了大神的思路,才知道自己的想法是错误的,主要是运行时间达不到要求,因此,参考大神的思路(差不多核心代码都是大神的),下面写一下心得吧:
核心处分为两个循环,外循环从列表的第一个位置开始遍历,退出的条件是,当前位置 + 完美数列的个数若是大于或者等于总的个数,则可以退出外层的循环;内层的循环则是,寻找完美序列,从记录下的完美数列最大值所在的位置,判断后面的数是否满足题中的要求,若是满足,则完美数列的个数加1,若是不满足,则内层循环可以退出了。
def get_out(my_list, para, num):
max = 0
for i in range(num):
max_ = my_list[i] * para
next_ = max + i
if next_ >= num:
break
for j in range(next_, num):
if my_list[j] <= max_:
max += 1
else:
break
print(max)
num, para = input().split()
num, para = int(num), int(para)
count = 0
list_1 = []
list = input().split()
for number in list:
list_1.append(int(number))
list_1.sort()
get_out(list_1, para, num)