解题思路:本题中解题有一个很重要的思路,就是在题目所给出的所有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分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复