2009-10-03 93 views
0

Question source: SPOJ.. ORDERS爲什麼我的代碼獲取NZEC運行時錯誤?

def swap(ary,idx1,idx2): 
    tmp = ary[idx1] 
    ary[idx1] = ary[idx2] 
    ary[idx2] = tmp 

def mkranks(size): 
    tmp = [] 
    for i in range(1, size + 1): 
     tmp = tmp + [i] 
    return tmp 

def permutations(ordered, movements): 
    size = len(ordered) 
    for i in range(1, size): # The leftmost one never moves 
     for j in range(0, int(movements[i])): 
      swap(ordered, i-j, i-j-1) 
    return ordered 

numberofcases = input() 
for i in range(0, numberofcases): 
    sizeofcase = input() 
    tmp = raw_input() 
    movements = "" 
    for i in range(0, len(tmp)): 
     if i % 2 != 1: 
      movements = movements + tmp[i] 
    ordered = mkranks(sizeofcase) 
    ordered = permutations(ordered, movements) 
    output = "" 
    for i in range(0, sizeofcase - 1): 
     output = output + str(ordered[i]) + " " 
    output = output + str(ordered[sizeofcase - 1]) 
    print output 
+1

這是一些醜陋的代碼。如果你想提供更多關於你的錯誤的信息,你會更有可能得到答案。 – SilentGhost 2009-10-03 22:43:37

+0

nzec錯誤發生時,我們終止我們的代碼沒有返回零..我不知道我的錯在哪裏.. – Vaibhav 2009-10-03 23:13:34

回答

1

已經使你的代碼更Python(但不改變其流量/算法)了一下:

def swap(ary, idx1, idx2): 
    ary[idx1], ary[idx2] = [ary[i] for i in (idx2, idx1)] 

def permutations(ordered, movements): 
    size = len(ordered) 
    for i in range(1, len(ordered)): 
     for j in range(movements[i]): 
      swap(ordered, i-j, i-j-1) 
    return ordered 

numberofcases = input() 
for i in range(numberofcases): 
    sizeofcase = input() 
    movements = [int(s) for s in raw_input().split()] 
    ordered = [str(i) for i in range(1, sizeofcase+1)] 
    ordered = permutations(ordered, movements) 
    output = " ".join(ordered) 
    print output 

我看到它在SPOJ URL您提供的樣本的情況下正常運行表明。你的失敗案件是什麼?

+0

其給予「超過時間限制」..我想我高度重新思考我的邏輯到這個問題.. – Vaibhav 2009-10-03 23:04:38

+0

是啊,對於一些輸入我相信這將花費超過13秒的分配,這是一個非常可怕的算法(我的重寫消除了許多令人難以置信的時間浪費,比如通過重複添加單個項目列表來構建列表,但是我根本沒有改變你的底層算法,因爲我認爲你試圖彎曲你的大腦肌肉,而不是得到預先咀嚼的食物;-)。 – 2009-10-03 23:47:29

相關問題