在python 2.7

时间:2016-03-01 22:14:19

标签: python python-2.7

我目前正在为一个学校项目编写一段代码,其中我们必须引导客户到超市内的可用注册。格式是我们首先得到一个带有两个数字" 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])

0 个答案:

没有答案