[英]Google Jam test cases passes but submission shows “Wrong Answer”
注:題“Reversort”和“Reversort Engineering”的陳述的主要部分是相同的,除了最后一段。 否則問題可以獨立解決。
Reversort 是一種以升序對不同整數列表進行排序的算法。 該算法基於“反向”操作。 此操作的每個應用程序都會反轉列表中某些連續部分的順序。
在 i-1 次迭代之后,列表的位置 1,2,…,i-1 包含 L 的 i-1 個最小元素,按升序排列。 在第 i 次迭代期間,該過程反轉從第 i 個 position 到第 i 個最小元素的當前 position 的子列表。 這使得第 i 個最小元素最終出現在第 i 個 position 中。
例如,對於具有 4 個元素的列表,該算法將執行 3 次迭代。 下面是它如何處理 L=[4,2,1,3]:
i=1, j=3⟶L=[1,2,4,3] i=2, j=2⟶L=[1,2,4,3] i=3, j=4⟶L=[1 ,2,3,4] 在我們的架構上執行算法最昂貴的部分是反向操作。 因此,我們對每次迭代成本的度量只是傳遞給 Reverse 的子列表的長度,即值 j−i+1。 整個算法的成本是每次迭代的成本之和。
在上面的示例中,迭代花費 3、1 和 2,按此順序,總共 6。
給定初始列表,計算在其上執行 Reversort 的成本。
輸入 輸入的第一行給出了測試用例的數量,T.T 測試用例緊隨其后。 每個測試用例由 2 行組成。 第一行包含單個 integer N,表示輸入列表中的元素數。 第二行包含 N 個不同的整數 L1, L2, ..., LN,依次表示輸入列表 L 的元素。
Output 對於每個測試用例,output 一行包含 Case #x: y,其中 x 是測試用例編號(從 1 開始),y 是在作為輸入的列表中執行 Reversort 的總成本。
限制時間限制:10 秒。 Memory 限制:1 GB。 測試集 1(可見判定)1≤T≤100。 2≤N≤100。 1≤Li≤N,對於所有 i。 Li≠Lj,對於所有 i≠j。 示例 示例輸入 3 4 4 2 1 3 2 1 2 7 7 6 5 4 3 2 1 示例 Output 案例 #1:6 案例 #2:1 案例 #3:12 案例 #1 示例在上面的陳述中進行了描述。
在示例案例 #2 中,有一次迭代,其中 Reverse 應用於大小為 1 的子列表。因此,總成本為 1。
在示例案例 #3 中,第一次迭代反轉整個列表,成本為 7。之后,列表已經排序,但還有 5 次迭代,每次迭代的成本為 1。
def Reversort(L):
sort = 0
for i in range(len(L)-1):
small = L[i]
x = L[i]
y = L[i]
for j in range(i, len(L)):
if L[j] < small :
small = L[j]
sort = sort + (L.index(small) - L.index(y) + 1)
L[L.index(small)] = x
L[L.index(y)] = small
print(L) #For debugging purpose
return sort
T = int(input())
for i in range(T):
N = int(input())
L = list(map(int, input().rstrip().split()))
s = Reversort(L)
print(f"Case #{i+1}: {s}")
對於測試用例 7 6 5 4 3 2 1,您的代碼失敗。代碼給出的答案是 18,而答案應該是 12。
您忘記了顛倒 i 和 j 之間的列表。
算法說
在第 i 次迭代期間,該過程反轉從第 i 個 position 到第 i 個最小元素的當前 position 的子列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.