物品装柜

简单 解决次数: 423 提交次数: 825 内存限制: 256MB 时间限制: 1000ms
模拟算法

物品装柜

提交数: 825, 通过率: 51.27%, 平均分: 54.62

题目描述:

某物品柜有5层,每层有10个格子,每个格子只能放一个物品。第1层格子号依次为1到10,第2层格子编号依次为11-20。依此类推。有9组物品(组号1~9),每组有2到8个物品,物品总数不超过50个:将9组物品按组号由小到大依次放入柜中,放置方式有两种:

1)整体放置。按格子编号由小到大的次序查找第一个可放置该组全部物品的空区域(空区域是指从某个空格子开始的同层连续的所有空格子),若找到,则在该空区域居中、连续放置该组全部物品,如图a所示。

2)零散放置。若所有空区域格子数都小于该组物品数,则将该组每个物品依次放置在当前编号最小的空格子中,如图b所示。

1648632603159039470.png

输入格式:

一行有9个整数,整数之前用一个空格分隔,分别表示1-9组物品每组的个数。

输出格式:

输出共9行,表示每组物品在柜子中所放置的格子编号。

样例:

提示:

请完善程序:

def init():
    for i in range( n ):
        for j in range( m ):
            if q[i][j] == 0:
                k = j + 1
                while k < m and q[i][k] != 1:
                    k += 1
                _______(1)_______
            else:
                v[i][j] = 0
def getpos( L ):
    ret = -1
    for i in range( n ):
        for j in range( m ):
            if _______(2)________:
                ret = [ i, j ]
                return ret
    return ret

n = 5     #层数
m = 10    #列数
T = 9     #组数
q = [ [0 for i in range(m)] for j in range(n) ]       #保存物品放的情况
v = [ [0 for i in range(m)] for j in range(n) ]
init()       #预处理
# print(v)
a = list( map( int, input().split() ) )     #输入每组物品数量
start = 0
for i in range( T ):   #枚举每一组的物品
    p = getpos( a[i] )  #a[i]为该组物品的数量,即需要占用的格子数量
    if p != -1:
        row = p[0]
        col = p[1]
        k = ______(3)_______
        k = k // 2
        t = col
        for j in range( k, 0, -1 ):
            v[row][t] = j           #更新v数组
            t += 1
        for j in range( t, t + a[i] ):
            q[row][j] = i + 1
            v[row][j] = 0
    else:
        cnt = 0
        while cnt < a[i]:
            row = start // m
            col= start % m
            if q[row][col] == 0:
                q[row][col] = i + 1
                v[row][col] = 0
                cnt += 1
            start += 1

#输出放置情况
# for i in q:
#     print( i )
for k in range( T ):
    for i in range( n ):
        for j in range( m ):
            if q[i][j] == k+1:
                print( ______(4)_______, end = " ")
    print()
时间限制: 1000ms
空间限制: 256MB

来源: 2021.01选考题

我的提交记录

请先登录查看提交记录

登录

825

总提交

423

通过数

51.27%

通过率

48.73%

击败用户

提交分布

51.27%
通过率
正确数 423
错误数 402

解题排行

排名 用户 执行用时 内存消耗 语言 代码长度 提交时间
1
prince
0ms 1,944KB C++ 1599bytes 2021-01-26 04:21:18
2
Draba
2ms 1,944KB C++ 1373bytes 2021-01-26 05:35:02
3
zqrAKIOI
2ms 1,944KB C++ 1555bytes 2024-09-09 14:18:02
4
JingZhiyuan
2ms 1,944KB C++ 1366bytes 2025-11-30 14:03:03
5
JingZhiyuan
2ms 1,944KB C++ 1276bytes 2025-11-30 14:05:30
6
linjy
3ms 1,944KB C++ 893bytes 2021-04-05 12:07:04
7
Jing_Zhiyuan
3ms 1,944KB C++ 1366bytes 2025-11-30 14:02:48
8
okok
3ms 1,944KB C++ 1569bytes 2022-03-15 11:11:21
9
xiaoxiaohao
3ms 1,960KB C++ 1015bytes 2021-04-13 13:23:59
10
prince2
4ms 1,944KB C++ 1597bytes 2021-05-29 10:42:13
11
pzc2004
14ms 16,768KB Python 822bytes 2021-01-31 22:58:54
12
Birds
27ms 16,996KB Python 1470bytes 2025-03-28 16:42:26
13
huangruibin01
28ms 16,996KB Python 1694bytes 2025-03-05 16:03:30
14
hqn570
28ms 16,996KB Python 1738bytes 2025-02-21 15:02:25
15
xuezhiqian
29ms 16,996KB Python 1734bytes 2025-02-21 15:03:44
16
Thunder
29ms 16,996KB Python 3027bytes 2025-03-09 09:27:45
17
hhk
29ms 16,996KB Python 1748bytes 2025-03-14 15:14:28
18
zzmzzm
29ms 16,996KB Python 1737bytes 2026-03-03 14:54:07
19
Flowey
29ms 16,996KB Python 1752bytes 2025-04-06 15:54:33
20
ARforever
29ms 16,996KB Python 1739bytes 2025-02-20 11:51:12

请先登录后提交代码

登录