L1-049 天梯赛座位分配 (20 分)

摘要
Title: L1-049 天梯赛座位分配 (20 分)
Tag: 模拟
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

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()
使用搜索:谷歌必应百度