解题思路:本题中解题有一个很重要的思路,就是在题目所给出的所有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 人评分
化学品问题 (C语言代码)浏览:1393 |
点我有惊喜!你懂得!浏览:2754 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:711 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码) 用函数传参的方法浏览:4120 |
2^k进制数 (C++代码)使用递归方法浏览:736 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1067 |
弟弟的作业 (C++代码)浏览:1342 |
十->二进制转换 (C语言代码)浏览:1330 |
计算质因子 (C++代码)浏览:1824 |
【蟠桃记】 (C语言代码)浏览:697 |