问题描述

爱丽丝要完成一项修剪灌木的工作。

有N棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。

灌木每天从早上到傍晩会长高 1 厘米, 而其余时间不会长高。在第一天的早晨, 所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式

一个正整数N, 含义如题面所述。

输出格式

输出N行, 每行一个整数, 第i行表示从左到右第i棵树最高能长到多高。

样例输入

3

样例输出

4
2
4

评测用例规模与约定

对于 30%的数据, N≤10.

对于100%的数据, 1<N≤10000.

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 512M

问题分析

每一棵灌木在它被修剪之前达到最大高度。高度从0到最大值经历了如下一段时间:

设其中一棵灌木为x,爱丽丝刚刚修剪完x,所以x此时的高度为0。爱丽丝继续向左/向右前进,一直修到最左端/最右端并折返,当重新到达x灌木处时,x灌木的高度为最大值。

因此,我们只需计算每一棵灌木距离左端更远还是距离右端更远,更远意味着灌木的生长时间更长。

Python代码

n=int(input())for i in range(n):    maxd=max(i,n-i-1)  # 检查左侧元素多还是右侧元素多,取多的一侧    print(maxd*2)