题目描述
解题思路
解法一:暴力解法,按照题目要求每一次生长就遍历所有的树,裁剪就把该裁剪那一颗归为0,这样只要不限制时间和内存肯定是能全做出来的,但是考试只能拿50分其他会超限
解法二:用数学思想来做就是,一棵树的最大生长高度应该是第一次被剪到的时候再到第二次被剪到的时候这个中间时间的生长高度。其实也就是这颗树距离边界距离的二倍。因为碰到边界后会返回刚好是双倍距离这个路程用来生长。
代码
解法一暴力解法
n=int(input())
tree=[0]*n
maxtree=[0]*n
cut=0
reverse=False
for i in range(50):
for i in range(len(tree)):
tree[i]+=1
for i in range(len(tree)):
if tree[i]>maxtree[i]:
maxtree[i]=tree[i]
tree[cut] = 0
if cut == 0:
reverse = False
if cut == len(tree) - 1:
reverse = True
if reverse == False:
cut += 1
else:
cut -= 1
for i in maxtree:
print(i)
解法二数学思想之两倍路程
n=int(input())
for i in range(n):
left=i-0
right=n-i-1
print(2*max(left,right))