我目前正在为一个学校项目编写一段代码,其中我们必须引导客户到超市内的可用注册。格式是我们首先得到一个带有两个数字" x y"的字符串,其中x是寄存器的数量,y是进入/离开寄存器的人数。接下来有几行" C X"或" L X"格式,其中" C X"意味着顾客到达登记册X,并且" L X"将是一个客户离开注册X.现在如果客户到达一个空的注册,它应该只打印这个注册号,但如果客户到达已经采用的注册,它应该打印出最近的免费注册,有利于较低的数字(比如说nr 4,但客户到达,3和5都是免费的,它应该打印3)。我目前正在使用一个数组,其中我将寄存器的数量保持为0,然后如果寄存器被采用则将它们更改为1,如果是,则循环通过+ - 1,+ - 2等等,直到我找到一个免费注册。但是,对于完整的等级,我们需要能够接收高达一百万M的输入,并且我们的代码需要在一分钟内执行并消耗最多256 MB的内存。目前的代码如下,我一直在达到时间限制,可能是因为我在数组上迭代的方式,关于如何优化这个的任何想法?
N, M = map(int, raw_input().split())
entries = []
for x in range(0, M):
entries.append(raw_input())
registers = []
for x in range(0,M):
registers.append(0)
for line in entries:
if line[0] == "L":
registers[int(line[2])-1] = 0
elif registers[int(line[2])-1] == 1:
i = 0
n = int(line[2])-1
while True:
if registers[n-i] == 1:
pass
elif n-i >= 0:
registers[n-i] = 1
print n-i+1
break
if registers[n+i] == 1:
pass
else:
registers[n+i] = 1
print n+i+1
break
i += 1
else:
registers[int(line[2])-1] = 1
print int(line[2])