L1-049 天梯赛座位分配 (20 分)
摘要
Title: L1-049 天梯赛座位分配 (20 分)
Tag: 模拟
Memory Limit: 64 MB
Time Limit: 1000 ms
Powered by:NEFU AB-IN
L1-049 天梯赛座位分配 (20 分)
-
题意
天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员…… 以此类推。如果最后只剩下 1 所学校的队伍还没有分配座位,则需要安排他们的队员隔位就坐。本题就要求你编写程序,自动为各校生成队员的座位号,从 1 开始编号。
-
思路
模拟即可,遇到这种编号的题,最好按编号的顺序来做,否则很容易重复
- 根据题意,应按照,先学校,后人员,再队伍的次序遍历,即学校放在循环最里面
小技巧:求出学校队伍的最大值,当遍历到当前队伍,判断此时该学校还是否有这支队伍,没有就跳过
-
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33'''
Author: NEFU AB-IN
Date: 2022-04-16 17:05:57
FilePath: \ACM\GPLT\L1-049.PY
LastEditTime: 2022-04-16 17:05:58
'''
N = 110
pos = [[[0] * N for _ in range(N)] for _ in range(N)]
# pos[i][j][k] 代表第i个学校,第j个队伍,第k个队员的位置
n = int(input())
a = [0, *list(map(int, input().split()))]
mx = max(a)
pre, x = 0, 0
for j in range(1, mx + 1):
for k in range(1, 11):
for i in range(1, n + 1):
if j <= a[i]:
if pre == i:
x += 2
else:
x += 1
pos[i][j][k] = x
pre = i
for i in range(1, n + 1):
print(f"#{i}")
for j in range(1, a[i] + 1):
for k in range(1, 11):
print(pos[i][j][k], end=" " if k < 10 else "")
print()