簡體   English   中英

Google Jam 測試用例通過但提交顯示“錯誤答案”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM