题目叙述
问题描述:略
输入格式:略
输出格式:略
样例
样例输入
4
2 5 4 2
样例输出
1 2
6 7 8 9 10
11 12 13 14
3 4
样例说明
1) 购2张票,得到座位1、2。
2) 购5张票,得到座位6至10。
3) 购4张票,得到座位11至14。
4) 购2张票,得到座位3、4。
满分证明
解题思路
- 设立几个表示flag;
- 先确定在第几层;
- 再确定是否是否直接安排;
- 不能直接安排要插缝。
满分代码
n = int(input())
ps = list(map(int, input().split()))
sc = []
# 初始化车票数
cp = [[1, 1, 1, 1, 1] for _ in range(20)]
pss = [5] * 20
for i in range(n):
df = -1
num = ps[i]
# 先确定在第几层
for f in range(20):
if num <= pss[f]:
df = f
break
if df != -1:
ix = df
pss[ix] = pss[ix] - num
ijx = cp[ix].index(1)
for nn in range(num):
cp[ix][ijx + nn] = 0
sc.append(ix * 5 + ijx + nn + 1)
else:
for jk in range(20):
while pss[jk] >= 1 and num != 0:
pss[jk] = pss[jk] - 1
xix = cp[jk].index(1)
cp[jk][xix] = 0
sc.append(jk * 5 + xix + 1)
num -= 1
if num == 0:
break
for i in range(n):
num = ps[i]
for jj in range(num):
print(sc[sum(ps[0:i]) + jj], end=" ")
print()
需者自取传送门(∩ᄑ_ᄑ)⊃━☆【CCF 2013-2021】本博主整理历年至少前两题 python 满分代码目录