小多想在美化一下自己的庄园。他的庄园毗邻一条小河,他希望在河边种一排树,共 M 棵。小多采购了 N 个品种的树,每个品种的数量是 Ai (树的总数量恰好为 M)。但是他希望任意两棵相邻的树不是同一品种的。小多请你帮忙设计一种满足要求的种树方案。
输入描述:
第一行包含一个正整数 N,表示树的品种数量。
第二行包含 N 个正整数,第 i (1 <= i <= N) 个数表示第 i 个品种的树的数量。
数据范围:
1 <= N <= 1000
1 <= M <= 2000
输出描述:
输出一行,包含 M 个正整数,分别表示第 i 棵树的品种编号 (品种编号从1到 N)。若存在多种可行方案,则输出字典序最小的方案。若不存在满足条件的方案,则输出"-"。
输入例子1:
3
4 2 1
输出例子1:
1 2 1 2 1 3 1
首先判断能否种树:
如果M是偶数,那么如果有某个种类的数量大于M//2, 那么不能种;
如果M是奇数,那么如果有某个种类的数量大于(M+1)//2 , 那么不能种;
接着如何种树:
每次种树之前,先判断剩下的树种有没有数量等于所有树数量一半((M+1)//2)的种类,如果有, 则先种该树,否则,总小到大遍历,找到第一棵可以种的树(要与上一课树不同)
while True:
try:
_ = int(input().strip())
array = list(map(int, input().split()))
n = sum(array)
maxer = max(array)
if n % 2 == 1 and maxer > (n + 1) // 2 or n % 2 == 0 and maxer > n // 2:
print("-")
else:
result = []
while (n):
maxer = 0
index = -1
for i in range(len(array)):
if array[i] > maxer:
maxer = array[i]
index = i
if maxer > n / 2:
result.append(index + 1)
array[index] -= 1
else:
for i in range(len(array)):
if array[i] > 0 and (len(result) == 0 or len(result) and i + 1 != result[-1]) :
result.append(i + 1)
array[i] -= 1
break
else:
continue
n -= 1
result = list(map(str, result))
print(" ".join(result))
except:
break