21计科程一帆


私信TA

用户名:uq_88617846948

访问量:5231

签 名:

搞哥毛哥在上,俺寻思俺是一个最大最强的技术小子

等  级
排  名 959
经  验 3415
参赛次数 2
文章发表 52
年  龄 19
在职情况 学生
学  校 石河子大学
专  业 计算机科学与技术

  自我简介:

憨憨一个,欢迎大佬指正

解题思路:本题中解题有一个很重要的思路,就是在题目所给出的所有Ai中,如果没有重复出现的情况下,就是  最小的  那个为我们要求的结果。在Ai出现重复的情况下,我们就要采取一定的方法去重,比如本题所给的样例中,3个Ai都是2,我们知道,在2!出现3次以上的情况下,就可以将其中的一部分折算为3*2!,即为3!,本题中的3个2就可以折算为一个3!,这样所求的结果就是3,但是要注意的一点是如果Ai!出现的次数不是恰好能换算为整数个(Ai+1)!,这时候换算过后Ai也会有剩余,因此最小的Ai序列中的元素依然是Ai,这时候就没有继续换算的必要,只需要输出Ai即可,因为后面无论再怎么换算,最开始最小的Ai始终无法去除;但如果是恰好能换算为整数个(Ai+1)!,那么这时就要把K*(Ai+1)个Ai!换算为K个(Ai+1)!,一步一步这么迭代下去,直到最终的An无法满足条件,即有(An+1)*K个An!可以用来换算。(前文中出现的K>=1且K为整数)


注意事项:注意判断条件是有(An+1)*K个An!可以用来换算,而不是有(An+1)以上个An!可用于换算


参考代码:

from collections import defaultdict#用于识别未出现的键,默认值为0
a=int(input())
b=input().split()
b=[int(i) for i in b]
c=defaultdict(int)
d=min(b)
for i in b:
   c[i]+=1
jishu=d
while 1:
   if c[jishu]%(jishu+1)==0:
       c[jishu+1]+=int(c[jishu]/(jishu+1))
       jishu+=1
   else:
       break
print(jishu)

 

0.0分

10 人评分

  评论区

  • «
  • »